
-- =================================================================
-- 1818AI用户服务数据库结构定义
-- 整合了所有表结构和迁移变更
-- =================================================================

-- =================================================================
-- 1. 用户与认证相关表
-- =================================================================

-- 用户表
CREATE TABLE IF NOT EXISTS `user` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `phone` varchar(20) UNIQUE DEFAULT NULL COMMENT '手机号，唯一（微信登录用户可为空）',
  `wechat_openid` varchar(64) DEFAULT NULL COMMENT '微信openid，用于微信登录',
  `username` varchar(32) UNIQUE NOT NULL COMMENT '用户名，唯一',
  `real_username` varchar(64) DEFAULT NULL COMMENT '真实用户名',
  `id_number` varchar(18) DEFAULT NULL COMMENT '身份证号码',
  `password_jwt` varchar(512) DEFAULT NULL COMMENT 'JWT加密密码（微信登录用户可为空）',
  `role` tinyint NOT NULL DEFAULT 1 COMMENT '角色（0游客/1普通/2VIP/3SVIP）',
  `membership_expires_at` datetime DEFAULT NULL COMMENT '会员到期时间',
  `avatar_url` varchar(255) DEFAULT NULL COMMENT '头像URL',
  `is_verified` tinyint NOT NULL DEFAULT 0 COMMENT '是否实名认证 (0-未认证, 1-已认证)',
  `invite_code` varchar(16) UNIQUE DEFAULT NULL COMMENT '推广码',
  `inviter_id` bigint DEFAULT NULL COMMENT '邀请人ID',
  `promotion_level` tinyint NOT NULL DEFAULT 0 COMMENT '推广等级',
  `points` int NOT NULL DEFAULT 0 COMMENT '积分余额',
  `points_expires_at` datetime DEFAULT NULL COMMENT '积分过期时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  KEY `idx_user_wechat_openid` (`wechat_openid`),
  UNIQUE KEY `uk_user_wechat_openid` (`wechat_openid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 管理员表
CREATE TABLE IF NOT EXISTS `admin_user` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `username` varchar(64) UNIQUE NOT NULL COMMENT '管理员用户名',
  `password_hash` varchar(255) NOT NULL COMMENT '哈希后的密码',
  `role` tinyint NOT NULL COMMENT '角色（0工作人员/1管理员）',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


-- =================================================================
-- 2. 分类管理表
-- =================================================================

-- 类目表
CREATE TABLE IF NOT EXISTS `category` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(64) NOT NULL COMMENT '类目名称',
  `type` tinyint NOT NULL COMMENT '类目类型(1课程分类/2工作流分类)',
  `description` varchar(255) DEFAULT NULL COMMENT '类目描述',
  `sort_order` int NOT NULL DEFAULT 0 COMMENT '排序字段',
  `is_enabled` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否启用(0禁用/1启用)',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  KEY `idx_category_type` (`type`),
  KEY `idx_category_enabled` (`is_enabled`),
  KEY `idx_category_sort` (`sort_order`),
  UNIQUE KEY `uk_category_name_type` (`name`, `type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='类目表';

-- =================================================================
-- 3. 内容核心业务表 (工作流 & 教培)
-- =================================================================

-- 工作流表
CREATE TABLE IF NOT EXISTS `workflow` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(128) NOT NULL COMMENT '工作流名称',
  `description` text COMMENT '工作流的详细描述',
  `owner_id` bigint NOT NULL COMMENT '创建者ID',
  `cover_url` varchar(255) DEFAULT NULL COMMENT '封面图片URL',
  `detail_gallery` longtext DEFAULT NULL COMMENT '详情图集（JSON格式存储多张图片URL）',
  `video_id` varchar(64) DEFAULT NULL COMMENT '关联预览视频ID（阿里云VOD视频ID）',
  `data` longtext COMMENT '存储工作流核心逻辑的JSON字符串',
  `data_file_url` varchar(512) DEFAULT NULL COMMENT '工作流依赖文件地址（文件上传时的URL）',
  `like_count` int NOT NULL DEFAULT 0 COMMENT '点赞数量',
  `is_public` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否公开',
  `full_access_role` tinyint NOT NULL DEFAULT 1 COMMENT '查看完整data所需最低角色',
  `copy_access_role` tinyint NOT NULL DEFAULT 1 COMMENT '复制所需最低角色',
  `price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '价格',
  `audit_status` tinyint NOT NULL DEFAULT 0 COMMENT '审核状态(0待审核/1通过/2拒绝)',
  `category` varchar(64) DEFAULT NULL COMMENT '工作流分类',
  `category_id` bigint DEFAULT NULL COMMENT '关联类目ID',
  `rating` int DEFAULT NULL COMMENT '评分(1-5)',
  `reject_reason` varchar(255) DEFAULT NULL COMMENT '拒绝原因',
  `review_time` datetime DEFAULT NULL COMMENT '审核时间',
  `is_free` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否免费(0收费/1免费)',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  KEY `idx_workflow_category_id` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 工作流点赞表
CREATE TABLE IF NOT EXISTS `workflow_like` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` bigint NOT NULL COMMENT '点赞用户ID',
  `workflow_id` bigint NOT NULL COMMENT '被点赞的工作流ID',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '点赞时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_workflow` (`user_id`, `workflow_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 视频表
CREATE TABLE IF NOT EXISTS `video` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `title` varchar(128) NOT NULL COMMENT '视频标题',
  `description` text COMMENT '视频描述',
  `owner_id` bigint NOT NULL COMMENT '创建者ID',
  `cover_url` varchar(255) DEFAULT NULL COMMENT '封面图片URL',
  `vod_video_id` varchar(64) DEFAULT NULL COMMENT '阿里云VOD视频ID',
  `duration` int DEFAULT NULL COMMENT '视频时长(秒)',
  `view_count` int NOT NULL DEFAULT 0 COMMENT '观看次数',
  `like_count` int NOT NULL DEFAULT 0 COMMENT '点赞数量',
  `is_public` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否公开',
  `audit_status` tinyint NOT NULL DEFAULT 0 COMMENT '审核状态(0待审核/1通过/2拒绝)',
  `category` varchar(64) DEFAULT NULL COMMENT '视频分类',
  `reject_reason` varchar(255) DEFAULT NULL COMMENT '拒绝原因',
  `review_time` datetime DEFAULT NULL COMMENT '审核时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  KEY `idx_owner_id` (`owner_id`),
  KEY `idx_category` (`category`),
  KEY `idx_audit_status` (`audit_status`),
  KEY `idx_vod_video_id` (`vod_video_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 课程表
CREATE TABLE IF NOT EXISTS `course` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `title` varchar(128) NOT NULL COMMENT '课程标题',
  `description` text COMMENT '课程的富文本描述',
  `cover_url` varchar(255) DEFAULT NULL COMMENT '封面图URL',
  `detail_gallery` longtext DEFAULT NULL COMMENT '详情图集（JSON格式存储多张图片URL）',
  `price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '价格',
  `level` tinyint NOT NULL DEFAULT 0 COMMENT '访问课程所需的最低用户级别',
  `audit_status` tinyint NOT NULL DEFAULT 0 COMMENT '审核状态(0待审核/1通过/2拒绝)',
  `category` varchar(64) DEFAULT NULL COMMENT '课程分类',
  `category_id` bigint DEFAULT NULL COMMENT '关联类目ID',
  `reject_reason` varchar(255) DEFAULT NULL COMMENT '拒绝原因',
  `review_time` datetime DEFAULT NULL COMMENT '审核时间',
  `user_id` bigint DEFAULT NULL COMMENT '创建者ID',
  `is_free` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否免费(0收费/1免费)',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  KEY `idx_course_category_id` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 课程章节表
CREATE TABLE IF NOT EXISTS `course_chapter` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `course_id` bigint NOT NULL COMMENT '所属课程ID',
  `title` varchar(128) NOT NULL COMMENT '章节标题',
  `description` text COMMENT '章节描述',
  `order_num` int NOT NULL DEFAULT 0 COMMENT '章节排序编号',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 课程视频表
CREATE TABLE IF NOT EXISTS `course_video` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `chapter_id` bigint NOT NULL COMMENT '所属章节ID',
  `title` varchar(128) NOT NULL COMMENT '视频标题',
  `video_id` bigint DEFAULT NULL COMMENT '阿里云视频点播ID',
  `duration_sec` int DEFAULT 0 COMMENT '视频时长（秒）',
  `order_num` int NOT NULL DEFAULT 0 COMMENT '视频在章节内的排序编号',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 课程点赞表
CREATE TABLE IF NOT EXISTS `course_like` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` bigint NOT NULL COMMENT '点赞用户ID',
  `course_id` bigint NOT NULL COMMENT '被点赞的课程ID',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '点赞时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_course_like` (`user_id`, `course_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 课程收藏表
CREATE TABLE IF NOT EXISTS `course_favorite` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` bigint NOT NULL COMMENT '收藏用户ID',
  `course_id` bigint NOT NULL COMMENT '被收藏的课程ID',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '收藏时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_course_favorite` (`user_id`, `course_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 学习进度表
CREATE TABLE IF NOT EXISTS `user_video_progress` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` bigint NOT NULL,
  `course_id` bigint NOT NULL,
  `chapter_id` bigint NOT NULL,
  `video_id` bigint NOT NULL,
  `progress_sec` int NOT NULL DEFAULT 0 COMMENT '已观看秒数',
  `progress_pct` float NOT NULL DEFAULT 0 COMMENT '进度百分比',
  `last_watch_at` datetime DEFAULT NULL COMMENT '最后观看时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 工作流复制统计表
CREATE TABLE IF NOT EXISTS `workflow_copy_stat` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `workflow_id` bigint NOT NULL COMMENT '工作流ID',
  `owner_id` bigint NOT NULL COMMENT '工作流创建者ID',
  `copy_user_id` bigint NOT NULL COMMENT '复制用户ID',
  `copy_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '复制时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  KEY `idx_workflow_owner` (`owner_id`),
  KEY `idx_workflow_id` (`workflow_id`),
  KEY `idx_copy_time` (`copy_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 视频观看统计表
CREATE TABLE IF NOT EXISTS `video_view_stat` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `video_id` bigint NOT NULL COMMENT '视频ID',
  `owner_id` bigint NOT NULL COMMENT '视频创建者ID',
  `view_user_id` bigint NOT NULL COMMENT '观看用户ID',
  `view_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '观看时间',
  `view_duration` int DEFAULT 0 COMMENT '观看时长（秒）',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  KEY `idx_video_owner` (`owner_id`),
  KEY `idx_video_id` (`video_id`),
  KEY `idx_view_time` (`view_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


-- =================================================================
-- 3. 支付与订单相关表
-- =================================================================

-- 会员套餐表
CREATE TABLE IF NOT EXISTS `membership_plan` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(128) NOT NULL COMMENT '套餐名称',
  `description` text COMMENT '套餐的详细描述',
  `price` decimal(10,2) NOT NULL COMMENT '价格',
  `duration_days` int NOT NULL COMMENT '有效期天数',
  `target_role` tinyint NOT NULL COMMENT '购买后达到的角色等级',
  `discount_percentage` decimal(5,2) DEFAULT 0.00 COMMENT '优惠百分比率(0-100，如10.50表示10.5%的优惠)',
  `is_active` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否上架',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 订单表
CREATE TABLE IF NOT EXISTS `order` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `order_no` varchar(64) UNIQUE NOT NULL COMMENT '系统生成的唯一订单号',
  `user_id` bigint NOT NULL COMMENT '购买用户ID',
  `plan_id` bigint DEFAULT NULL COMMENT '购买的套餐ID',
  `original_price` decimal(10,2) DEFAULT NULL COMMENT '套餐原价',
  `amount` decimal(10,2) NOT NULL COMMENT '订单最终金额（实际支付金额）',
  `actual_duration_days` int DEFAULT NULL COMMENT '实际获得的会员天数',
  `discount_type` varchar(32) DEFAULT NULL COMMENT '优惠类型 (NONE/CONTINUOUS_MONTHLY/CONTINUOUS_YEARLY/FIRST_PURCHASE/SPECIAL_OFFER)',
  `discount_amount` decimal(10,2) DEFAULT NULL COMMENT '优惠金额',
  `discount_description` varchar(255) DEFAULT NULL COMMENT '优惠描述',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '订单状态 (0待支付/1已完成/2已取消/3支付失败)',
  `payment_method` tinyint DEFAULT NULL COMMENT '支付方式 (1支付宝/2微信支付)',
  `paid_at` datetime DEFAULT NULL COMMENT '支付成功时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_order_discount_type` (`discount_type`),
  KEY `idx_order_user_id_status` (`user_id`, `status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 支付流水表
CREATE TABLE IF NOT EXISTS `payment_transaction` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `order_no` varchar(64) NOT NULL COMMENT '关联的系统订单号',
  `transaction_no` varchar(128) DEFAULT NULL COMMENT '第三方支付平台返回的流水号',
  `payment_gateway` varchar(32) DEFAULT NULL COMMENT '支付网关',
  `amount` decimal(10,2) NOT NULL COMMENT '支付金额',
  `status` varchar(32) DEFAULT NULL COMMENT '第三方支付平台返回的状态',
  `raw_data` json DEFAULT NULL COMMENT '第三方支付平台通知的完整原始数据',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


-- =================================================================
-- 4. 推广与收益相关表
-- =================================================================

-- 提现申请表
CREATE TABLE IF NOT EXISTS `withdraw_request` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `amount` decimal(10,2) NOT NULL COMMENT '提现金额',
  `withdraw_type` varchar(32) NOT NULL COMMENT '提现类型（promotion/workflow/video）',
  `content_id` bigint DEFAULT NULL COMMENT '作品ID（工作流或视频提现时）',
  `account_type` varchar(32) DEFAULT NULL COMMENT '收款账户类型（alipay/wechat/bank）',
  `account` varchar(128) DEFAULT NULL COMMENT '收款账户（支付宝账号/微信ID/银行卡号）',
  `account_name` varchar(64) DEFAULT NULL COMMENT '收款人姓名',
  `bank_name` varchar(128) DEFAULT NULL COMMENT '开户行名称（银行卡提现时必填）',
  `bank_branch` varchar(128) DEFAULT NULL COMMENT '支行名称（银行卡提现时可选）',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态（0待审核/1通过/2拒绝）',
  `reason` varchar(255) DEFAULT NULL COMMENT '拒绝原因',
  `reviewer_id` bigint DEFAULT NULL COMMENT '审核人ID',
  `transaction_no` varchar(64) DEFAULT NULL COMMENT '第三方交易流水号',
  `fee_amount` decimal(10,2) DEFAULT '0.00' COMMENT '手续费金额',
  `actual_amount` decimal(10,2) DEFAULT NULL COMMENT '实际到账金额',
  `processed_at` datetime DEFAULT NULL COMMENT '处理完成时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '申请时间',
  `reviewed_at` datetime DEFAULT NULL COMMENT '审核时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_withdraw_user_id` (`user_id`),
  KEY `idx_withdraw_status` (`status`),
  KEY `idx_withdraw_create_time` (`create_time`),
  KEY `idx_withdraw_type` (`withdraw_type`),
  KEY `idx_withdraw_content_id` (`content_id`),
  KEY `idx_withdraw_reviewer` (`reviewer_id`),
  KEY `idx_withdraw_transaction_no` (`transaction_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 内容分成收益表
CREATE TABLE IF NOT EXISTS `content_revenue` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` bigint NOT NULL COMMENT '内容创作者ID',
  `content_type` tinyint NOT NULL COMMENT '内容类型 (1工作流/2视频)',
  `content_id` bigint NOT NULL COMMENT '内容ID',
  `revenue_source` tinyint NOT NULL COMMENT '收益来源 (1购买/2复制/3观看)',
  `source_value` decimal(10,2) DEFAULT '0.00' COMMENT '来源基础价值',
  `quantity` int NOT NULL DEFAULT 0 COMMENT '数量',
  `commission_rate` decimal(5,4) NOT NULL DEFAULT '0.0000' COMMENT '分成比例',
  `revenue_amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '创作者实际收益金额',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '收益状态 (0待结算/1已结算)',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '收益产生时间',
  `settled_at` datetime DEFAULT NULL COMMENT '结算时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_content` (`content_type`, `content_id`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 作品收益阶段表（新增）
CREATE TABLE IF NOT EXISTS `content_revenue_stage` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `content_type` tinyint NOT NULL COMMENT '内容类型 (1工作流/2视频)',
  `content_id` bigint NOT NULL COMMENT '内容ID',
  `user_id` bigint NOT NULL COMMENT '创作者ID',
  `stage_level` int NOT NULL COMMENT '阶段等级 (1,2,3...)',
  `stage_name` varchar(64) NOT NULL COMMENT '阶段名称',
  `target_count` int NOT NULL COMMENT '目标数量 (复制次数/观看次数)',
  `reward_amount` decimal(10,2) NOT NULL COMMENT '奖励金额',
  `current_count` int NOT NULL DEFAULT 0 COMMENT '当前数量',
  `is_achieved` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否已达到 (0未达到/1已达到)',
  `achieved_at` datetime DEFAULT NULL COMMENT '达到时间',
  `is_withdrawn` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否已提现 (0未提现/1已提现)',
  `withdrawn_at` datetime DEFAULT NULL COMMENT '提现时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_content_stage` (`content_type`, `content_id`, `stage_level`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_content` (`content_type`, `content_id`),
  KEY `idx_achieved` (`is_achieved`),
  KEY `idx_withdrawn` (`is_withdrawn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 粉丝推广关系与提成表
CREATE TABLE IF NOT EXISTS `fan_promotion_commission` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `promoter_id` bigint NOT NULL COMMENT '推广人ID',
  `fan_id` bigint NOT NULL COMMENT '粉丝用户ID',
  `order_id` bigint NOT NULL COMMENT '关联的订单ID',
  `order_amount` decimal(10,2) NOT NULL COMMENT '粉丝订单金额',
  `commission_rate` decimal(5,4) NOT NULL COMMENT '提成比例',
  `commission_level` tinyint NOT NULL COMMENT '提成发生时推广人的等级',
  `commission_amount` decimal(10,2) NOT NULL COMMENT '推广人实际提成金额',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '提成状态 (0待结算/1已结算)',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '提成产生时间',
  `settled_at` datetime DEFAULT NULL COMMENT '结算时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_promoter_fan` (`promoter_id`, `fan_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 用户余额表
CREATE TABLE IF NOT EXISTS `user_balance` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `balance` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '当前余额',
  `total_income` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '累计总收入',
  `total_withdrawn` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '累计提现总额',
  `frozen_amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '冻结金额（提现中）',
  `last_updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后更新时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_balance` (`user_id`),
  KEY `idx_user_balance_user_id` (`user_id`),
  KEY `idx_user_balance_balance` (`balance`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 用户余额变动记录表
CREATE TABLE IF NOT EXISTS `user_balance_log` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `change_type` varchar(32) NOT NULL COMMENT '变动类型（income/withdraw/freeze/unfreeze）',
  `change_amount` decimal(10,2) NOT NULL COMMENT '变动金额（正数为增加，负数为减少）',
  `balance_before` decimal(10,2) NOT NULL COMMENT '变动前余额',
  `balance_after` decimal(10,2) NOT NULL COMMENT '变动后余额',
  `source_type` varchar(32) DEFAULT NULL COMMENT '来源类型（promotion/workflow/video/withdraw）',
  `source_id` bigint DEFAULT NULL COMMENT '来源ID（订单ID、提现ID等）',
  `description` varchar(255) DEFAULT NULL COMMENT '变动描述',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_user_balance_log_user_id` (`user_id`),
  KEY `idx_user_balance_log_change_type` (`change_type`),
  KEY `idx_user_balance_log_create_time` (`create_time`),
  KEY `idx_user_balance_log_source` (`source_type`, `source_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


-- =================================================================
-- 5. 系统配置与其他
-- =================================================================

-- 系统消息表
CREATE TABLE IF NOT EXISTS `system_message` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` bigint NOT NULL COMMENT '接收用户ID',
  `title` varchar(64) NOT NULL COMMENT '消息标题',
  `content` text NOT NULL COMMENT '消息内容',
  `is_read` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否已读',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 推广等级配置表 (已废弃，推广等级配置已整合到revenue_config表)
-- 保留此表是为了兼容性，新代码应使用revenue_config表
CREATE TABLE IF NOT EXISTS `promotion_level_config` (
  `id` tinyint NOT NULL AUTO_INCREMENT COMMENT '等级ID',
  `level_name` varchar(32) NOT NULL COMMENT '等级名称',
  `min_paid_fans` int NOT NULL COMMENT '达到该等级所需的最低付费粉丝数量',
  `commission_rate` decimal(5,4) NOT NULL COMMENT '该等级对应的基础提成比例',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 收益配置表
CREATE TABLE IF NOT EXISTS `revenue_config` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `config_key` varchar(64) DEFAULT NULL COMMENT '配置键',
  `config_type` varchar(32) DEFAULT NULL COMMENT '配置类型（video/workflow/promotion）',
  `target_count` int DEFAULT NULL COMMENT '目标次数（视频播放次数/工作流复制次数）',
  `reward_amount` decimal(10,2) DEFAULT NULL COMMENT '奖励金额',
  `level` int DEFAULT NULL COMMENT '推广等级',
  `level_name` varchar(32) DEFAULT NULL COMMENT '推广等级名称',
  `min_fans` int DEFAULT NULL COMMENT '最小粉丝数',
  `commission_rate` decimal(5,4) DEFAULT NULL COMMENT '提成比例',
  `config_value` decimal(10,4) DEFAULT NULL COMMENT '配置值',
  `description` varchar(255) DEFAULT NULL COMMENT '配置说明',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_revenue_config_type` (`config_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 

-- =================================================================
-- 6. 礼品码与兑换相关表
-- =================================================================

-- 礼品码表
CREATE TABLE IF NOT EXISTS `gift_code` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `code` varchar(32) UNIQUE NOT NULL COMMENT '礼品码，唯一',
  `name` varchar(128) NOT NULL COMMENT '礼品码名称',
  `description` text COMMENT '礼品码描述',
  `type` tinyint NOT NULL COMMENT '礼品码类型 (1-积分卡/2-会员卡)',
  `points` int DEFAULT NULL COMMENT '积分数量（积分卡类型）',
  `points_expire_days` int DEFAULT NULL COMMENT '积分有效期天数（积分卡类型）',
  `target_role` tinyint DEFAULT NULL COMMENT '目标角色等级（会员卡类型）',
  `duration_days` int DEFAULT NULL COMMENT '会员有效期天数（会员卡类型）',
  `total_count` int NOT NULL DEFAULT 1 COMMENT '总可用次数',
  `used_count` int NOT NULL DEFAULT 0 COMMENT '已使用次数',
  `is_active` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
  `expire_time` datetime DEFAULT NULL COMMENT '礼品码过期时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  KEY `idx_gift_code_code` (`code`),
  KEY `idx_gift_code_type` (`type`),
  KEY `idx_gift_code_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 礼品码使用记录表
CREATE TABLE IF NOT EXISTS `gift_code_usage` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `gift_code_id` bigint NOT NULL COMMENT '礼品码ID',
  `user_id` bigint NOT NULL COMMENT '使用用户ID',
  `code` varchar(32) NOT NULL COMMENT '使用的礼品码',
  `type` tinyint NOT NULL COMMENT '礼品码类型 (1-积分卡/2-会员卡)',
  `points` int DEFAULT NULL COMMENT '积分数量',
  `points_expire_days` int DEFAULT NULL COMMENT '积分有效期天数',
  `target_role` tinyint DEFAULT NULL COMMENT '目标角色等级',
  `duration_days` int DEFAULT NULL COMMENT '会员有效期天数',
  `old_role` tinyint DEFAULT NULL COMMENT '用户原角色',
  `new_role` tinyint DEFAULT NULL COMMENT '用户新角色',
  `old_points` int DEFAULT NULL COMMENT '用户原积分',
  `new_points` int DEFAULT NULL COMMENT '用户新积分',
  `old_points_expires_at` datetime DEFAULT NULL COMMENT '用户原积分过期时间',
  `new_points_expires_at` datetime DEFAULT NULL COMMENT '用户新积分过期时间',
  `old_expires_at` datetime DEFAULT NULL COMMENT '用户原会员到期时间',
  `new_expires_at` datetime DEFAULT NULL COMMENT '用户新会员到期时间',
  `status` tinyint NOT NULL DEFAULT 1 COMMENT '使用状态 (1-成功/0-失败)',
  `error_message` varchar(255) DEFAULT NULL COMMENT '错误信息',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '使用时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  KEY `idx_gift_code_usage_user` (`user_id`),
  KEY `idx_gift_code_usage_code` (`gift_code_id`),
  KEY `idx_gift_code_usage_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 插件API密钥表 (重新设计)
CREATE TABLE IF NOT EXISTS `api_key` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `key_value` varchar(64) UNIQUE NOT NULL COMMENT 'API密钥值',
  `is_active` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
  `last_used_at` datetime DEFAULT NULL COMMENT '最后使用时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_api_key_user` (`user_id`),
  KEY `idx_api_key_value` (`key_value`),
  KEY `idx_api_key_active` (`is_active`),
  FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 企业微信二维码表
CREATE TABLE IF NOT EXISTS `wechat_qr_code` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `qr_code_url` varchar(512) NOT NULL COMMENT '二维码图片URL',
  `description` varchar(255) DEFAULT NULL COMMENT '二维码描述',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  KEY `idx_wechat_qr_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Banner图表
CREATE TABLE IF NOT EXISTS `banner` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `image` varchar(512) NOT NULL COMMENT '图片URL',
  `title` varchar(128) NOT NULL COMMENT '标题',
  `description` varchar(255) DEFAULT NULL COMMENT '描述',
  `button_text` varchar(64) DEFAULT NULL COMMENT '按钮文字',
  `link_type` varchar(32) NOT NULL DEFAULT 'internal' COMMENT '链接类型 (internal: 内部路由跳转, external: 外部链接跳转)',
  `link` varchar(512) DEFAULT NULL COMMENT '跳转链接',
  `sort_order` int NOT NULL DEFAULT 0 COMMENT '排序字段',
  `is_enabled` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否启用(0禁用/1启用)',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  KEY `idx_banner_enabled` (`is_enabled`),
  KEY `idx_banner_sort` (`sort_order`),
  KEY `idx_banner_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 推广海报表
CREATE TABLE IF NOT EXISTS `promotion_poster` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `title` varchar(128) NOT NULL COMMENT '海报标题',
  `description` varchar(255) DEFAULT NULL COMMENT '海报描述',
  `image_url` varchar(512) NOT NULL COMMENT '海报图片URL',
  `sort_order` int NOT NULL DEFAULT 0 COMMENT '排序字段',
  `is_enabled` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否启用(0禁用/1启用)',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
  PRIMARY KEY (`id`),
  KEY `idx_promotion_poster_enabled` (`is_enabled`),
  KEY `idx_promotion_poster_sort` (`sort_order`),
  KEY `idx_promotion_poster_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

