-- 创建数据库表结构
-- 作者: 王志维
-- 创建时间: 2026-01-20

-- 设置字符集
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- 1. 账户表
DROP TABLE IF EXISTS `account`;
CREATE TABLE `account` (
  `account_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
  `user_name` varchar(50) DEFAULT NULL COMMENT '用户名',
  `balance` decimal(10,2) DEFAULT '0.00' COMMENT '账户总余额',
  `withdrawable_balance` decimal(10,2) DEFAULT '0.00' COMMENT '可提现余额',
  `non_withdrawable_balance` decimal(10,2) DEFAULT '0.00' COMMENT '不可提现余额',
  `frozen_amount` decimal(10,2) DEFAULT '0.00' COMMENT '冻结金额',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_flag` tinyint(1) DEFAULT '0' COMMENT '是否删除 ：0 未删除，1已删除',
  PRIMARY KEY (`account_id`),
  KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='账户表，记录用户的账户信息';

-- 18. 提现记录表
DROP TABLE IF EXISTS `withdrawal_record`;
CREATE TABLE `withdrawal_record` (
  `record_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
  `user_name` varchar(50) DEFAULT NULL COMMENT '用户名',
  `withdrawal_amount` decimal(10,2) NOT NULL COMMENT '提现金额',
  `fee_amount` decimal(10,2) NOT NULL COMMENT '手续费',
  `actual_amount` decimal(10,2) NOT NULL COMMENT '实际到账金额',
  `status` tinyint(1) NOT NULL COMMENT '提现状态：1.待处理 2.处理中 3.成功 4.失败',
  `withdrawal_no` varchar(50) NOT NULL COMMENT '提现单号',
  `bank_name` varchar(100) DEFAULT NULL COMMENT '银行名称',
  `bank_account` varchar(100) DEFAULT NULL COMMENT '银行账号',
  `bank_cardholder` varchar(50) DEFAULT NULL COMMENT '持卡人姓名',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_flag` tinyint(1) DEFAULT '0' COMMENT '是否删除 ：0 未删除，1已删除',
  PRIMARY KEY (`record_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_withdrawal_no` (`withdrawal_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='提现记录表，记录用户的提现记录';

-- 2. 账户流水表
DROP TABLE IF EXISTS `account_transaction`;
CREATE TABLE `account_transaction` (
  `transaction_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
  `user_name` varchar(50) DEFAULT NULL COMMENT '用户名',
  `transaction_type` tinyint(1) NOT NULL COMMENT '交易类型：1.充值 2.提现 3.购买内容 4.退款 5.签到奖励 6.赠送 7.其他',
  `amount` decimal(10,2) NOT NULL COMMENT '交易金额',
  `before_balance` decimal(10,2) NOT NULL COMMENT '交易前余额',
  `after_balance` decimal(10,2) NOT NULL COMMENT '交易后余额',
  `status` tinyint(1) NOT NULL COMMENT '交易状态：1.成功 2.失败 3.处理中',
  `transaction_no` varchar(50) NOT NULL COMMENT '交易单号',
  `pay_type` tinyint(1) DEFAULT NULL COMMENT '支付方式：1.微信 2.支付宝 3.余额支付',
  `business_id` bigint(20) DEFAULT NULL COMMENT '关联业务ID',
  `business_type` varchar(50) DEFAULT NULL COMMENT '业务类型',
  `remark` varchar(255) DEFAULT NULL COMMENT '交易备注',
  `is_expense` tinyint(1) NOT NULL COMMENT '是否支出：1.是 0.否',
  `input_token` int(11) DEFAULT NULL COMMENT '输入token',
  `output_token` int(11) DEFAULT NULL COMMENT '输出token',
  `total_tokens` int(11) DEFAULT NULL COMMENT '合计tokens',
  `model_name` varchar(100) DEFAULT NULL COMMENT '处理的模型名称',
  `question` text DEFAULT NULL COMMENT '对应回答的问题或需求',
  `income_type` varchar(50) DEFAULT NULL COMMENT '收入类型：recharge(充值)、sign_in(签到奖励)',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
  `delete_flag` tinyint(1) DEFAULT '0' COMMENT '是否删除 ：0 未删除，1已删除',
  PRIMARY KEY (`transaction_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_transaction_no` (`transaction_no`),
  KEY `idx_business_id` (`business_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='账户流水表，记录用户的账户交易记录';



-- 5. 内容购买记录表
DROP TABLE IF EXISTS `content_purchase`;
CREATE TABLE `content_purchase` (
  `purchase_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
  `user_name` varchar(50) DEFAULT NULL COMMENT '用户名',
  `content_id` bigint(20) NOT NULL COMMENT '内容ID',
  `content_title` varchar(255) DEFAULT NULL COMMENT '内容标题',
  `pay_type` tinyint(1) NOT NULL COMMENT '购买方式：1.余额支付 2.积分支付',
  `amount` decimal(10,2) DEFAULT NULL COMMENT '支付金额',
  `points` int(11) DEFAULT NULL COMMENT '支付积分',
  `status` tinyint(1) NOT NULL COMMENT '购买状态：1.待支付 2.已支付 3.已取消',
  `purchase_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '购买时间',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_flag` tinyint(1) DEFAULT '0' COMMENT '是否删除 ：0 未删除，1已删除',
  PRIMARY KEY (`purchase_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_content_id` (`content_id`),
  KEY `idx_user_content` (`user_id`,`content_id`) COMMENT '联合索引，用于快速查询用户是否已购买某内容'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='内容购买记录表，记录用户购买的内容信息';

-- 6. 支付订单表
DROP TABLE IF EXISTS `payment_order`;
CREATE TABLE `payment_order` (
  `order_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `order_no` varchar(50) NOT NULL COMMENT '订单号',
  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
  `user_name` varchar(50) DEFAULT NULL COMMENT '用户名',
  `amount` decimal(10,2) NOT NULL COMMENT '支付金额',
  `pay_type` tinyint(1) NOT NULL COMMENT '支付方式：1.微信 2.支付宝',
  `status` tinyint(1) NOT NULL COMMENT '支付状态：1.待支付 2.已支付 3.支付失败 4.已取消 5.已退款',
  `channel_order_no` varchar(50) DEFAULT NULL COMMENT '支付渠道订单号',
  `product_name` varchar(255) DEFAULT NULL COMMENT '商品名称',
  `product_desc` varchar(255) DEFAULT NULL COMMENT '商品描述',
  `business_id` bigint(20) DEFAULT NULL COMMENT '关联业务ID',
  `business_type` varchar(50) DEFAULT NULL COMMENT '业务类型',
  `notify_url` varchar(255) DEFAULT NULL COMMENT '支付回调地址',
  `return_url` varchar(255) DEFAULT NULL COMMENT '支付成功跳转地址',
  `expire_time` datetime DEFAULT NULL COMMENT '过期时间',
  `pay_time` datetime DEFAULT NULL COMMENT '支付时间',
  `remark` varchar(255) DEFAULT NULL COMMENT '支付备注',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_flag` tinyint(1) DEFAULT '0' COMMENT '是否删除 ：0 未删除，1已删除',
  PRIMARY KEY (`order_id`),
  KEY `idx_order_no` (`order_no`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_business_id` (`business_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='支付订单表，记录用户的支付请求和支付结果';

-- 7. 内容表
DROP TABLE IF EXISTS `cms_content`;
CREATE TABLE `cms_content` (
  `content_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `title` varchar(255) NOT NULL COMMENT '标题',
  `subtitle` varchar(255) DEFAULT NULL COMMENT '副标题',
  `content_type` tinyint(1) NOT NULL COMMENT '内容类型（1文章，2视频，3图片）',
  `category_ids` varchar(255) DEFAULT NULL COMMENT '分类ID列表，逗号分隔',
  `summary` varchar(500) DEFAULT NULL COMMENT '内容摘要',
  `content` longtext DEFAULT NULL COMMENT '内容详情',
  `cover_image` varchar(255) DEFAULT NULL COMMENT '封面图片',
  `author_id` bigint(20) DEFAULT NULL COMMENT '作者ID',
  `author_name` varchar(50) DEFAULT NULL COMMENT '作者名称',
  `reviewer_id` bigint(20) DEFAULT NULL COMMENT '审核人ID',
  `reviewer_name` varchar(50) DEFAULT NULL COMMENT '审核人名称',
  `audit_status` tinyint(1) NOT NULL COMMENT '审核状态（1草稿，2待审核，3审核通过，4审核拒绝）',
  `audit_comment` varchar(255) DEFAULT NULL COMMENT '审核意见',
  `publish_status` tinyint(1) NOT NULL COMMENT '发布状态（1未发布，2已发布，3已下架）',
  `publish_time` datetime DEFAULT NULL COMMENT '发布时间',
  `view_count` int(11) DEFAULT '0' COMMENT '阅读量',
  `like_count` int(11) DEFAULT '0' COMMENT '点赞量',
  `comment_count` int(11) DEFAULT '0' COMMENT '评论量',
  `sort` int(11) DEFAULT '0' COMMENT '排序',
  `is_paid` tinyint(1) DEFAULT '0' COMMENT '是否付费：0免费，1付费',
  `price` decimal(10,2) DEFAULT NULL COMMENT '付费金额',
  `required_points` int(11) DEFAULT NULL COMMENT '所需积分',
  `support_points_pay` tinyint(1) DEFAULT '0' COMMENT '是否支持积分支付：0不支持，1支持',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
  `delete_flag` tinyint(1) DEFAULT '0' COMMENT '是否删除 ：0 未删除，1已删除',
  PRIMARY KEY (`content_id`),
  KEY `idx_author_id` (`author_id`),
  KEY `idx_audit_status` (`audit_status`),
  KEY `idx_publish_status` (`publish_status`),
  KEY `idx_publish_time` (`publish_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='内容表，记录各种类型的内容信息';

-- 8. 分类表
DROP TABLE IF EXISTS `cms_category`;
CREATE TABLE `cms_category` (
  `category_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `category_name` varchar(50) NOT NULL COMMENT '分类名称',
  `parent_id` bigint(20) DEFAULT '0' COMMENT '父分类ID',
  `level` int(11) DEFAULT '1' COMMENT '分类层级',
  `sort` int(11) DEFAULT '0' COMMENT '排序',
  `status` tinyint(1) DEFAULT '1' COMMENT '状态（1启用，2禁用）',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
  `delete_flag` tinyint(1) DEFAULT '0' COMMENT '是否删除 ：0 未删除，1已删除',
  PRIMARY KEY (`category_id`),
  KEY `idx_parent_id` (`parent_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='分类表，记录内容的分类信息';

-- 9. 标签表
DROP TABLE IF EXISTS `cms_tag`;
CREATE TABLE `cms_tag` (
  `tag_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tag_name` varchar(50) NOT NULL COMMENT '标签名称',
  `description` varchar(255) DEFAULT NULL COMMENT '标签描述',
  `use_count` int(11) DEFAULT '0' COMMENT '使用次数',
  `status` tinyint(1) DEFAULT '1' COMMENT '状态（1启用，2禁用）',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
  `delete_flag` tinyint(1) DEFAULT '0' COMMENT '是否删除 ：0 未删除，1已删除',
  PRIMARY KEY (`tag_id`),
  UNIQUE KEY `uk_tag_name` (`tag_name`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='标签表，记录内容的标签信息';

-- 10. 系统用户表
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
  `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_name` varchar(50) NOT NULL COMMENT '用户登录名称',
  `pwd` varchar(100) NOT NULL COMMENT '密码（非明文）',
  `real_name` varchar(50) DEFAULT NULL COMMENT '真实姓名',
  `tel` varchar(20) DEFAULT NULL COMMENT '手机',
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
  `salt` varchar(50) DEFAULT NULL COMMENT '加点盐（登录时候要用到的随机数）',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `enable` tinyint(1) DEFAULT '1' COMMENT '是否启用（1启用，2禁用）',
  `delete_flag` tinyint(1) DEFAULT '0' COMMENT '是否删除 ：0 未删除，1已删除',
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `uk_user_name` (`user_name`),
  KEY `idx_enable` (`enable`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统用户表，记录系统用户信息';

-- 11. 系统角色表
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
  `role_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色ID',
  `role_code` varchar(50) NOT NULL COMMENT '角色编码',
  `role_name` varchar(50) NOT NULL COMMENT '角色名称',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记',
  PRIMARY KEY (`role_id`),
  UNIQUE KEY `uk_role_code` (`role_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统角色表，记录系统角色信息';

-- 12. 系统用户角色关联表
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role` (
  `role_id` bigint(20) NOT NULL COMMENT '角色ID',
  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
  PRIMARY KEY (`role_id`,`user_id`),
  KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统用户角色关联表，记录用户与角色的关联关系';

-- 13. 系统菜单表
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu` (
  `menu_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `menu_pid` bigint(20) DEFAULT NULL COMMENT '为空时表示是子系统',
  `menu_name` varchar(50) NOT NULL COMMENT '菜单名称',
  `menu_src` varchar(255) DEFAULT NULL COMMENT '菜单链接地址',
  `menu_icon` varchar(50) DEFAULT NULL COMMENT '菜单图标',
  `menu_style` varchar(50) DEFAULT NULL COMMENT '菜单样式',
  `sort` int(11) DEFAULT '0' COMMENT '值越小越排在前面',
  `note` varchar(255) DEFAULT NULL COMMENT '备注',
  `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记',
  PRIMARY KEY (`menu_id`),
  KEY `idx_menu_pid` (`menu_pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统菜单表，记录系统菜单信息';

-- 14. 系统字典表
DROP TABLE IF EXISTS `sys_dict`;
CREATE TABLE `sys_dict` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '字典表ID',
  `dict_code` varchar(50) NOT NULL COMMENT '字典编码',
  `dict_name` varchar(50) NOT NULL COMMENT '字典名称',
  `dict_cn` varchar(50) DEFAULT NULL COMMENT '字典值中文文本',
  `dict_en` varchar(50) DEFAULT NULL COMMENT '字典值英文文本',
  `dict_value` varchar(50) DEFAULT NULL COMMENT '字典值',
  `sorts` int(11) DEFAULT NULL COMMENT '字典排序',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_dict_code` (`dict_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统字典表，记录系统字典信息';

-- 15. 系统日志表
DROP TABLE IF EXISTS `sys_log`;
CREATE TABLE `sys_log` (
  `log_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` varchar(50) DEFAULT NULL COMMENT '用户ID',
  `user_name` varchar(50) DEFAULT NULL COMMENT '用户名称',
  `log_type` varchar(50) DEFAULT NULL COMMENT '日志类型',
  `log_content` varchar(500) DEFAULT NULL COMMENT '日志类容',
  `server_ip` varchar(20) DEFAULT NULL COMMENT '服务端IP',
  `client_ip` varchar(20) DEFAULT NULL COMMENT '客户端IP',
  `log_time` varchar(20) DEFAULT NULL COMMENT 'yyyyMMddHHmmss',
  `note` varchar(255) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`log_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_log_type` (`log_type`),
  KEY `idx_log_time` (`log_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统日志表，记录系统操作日志';



-- 16. 大模型Token价格表
DROP TABLE IF EXISTS `model_price`;
CREATE TABLE `model_price` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `vendor` varchar(64) NOT NULL COMMENT '厂商',
  `model_name` varchar(128) NOT NULL COMMENT '模型名称',
  `input_price` decimal(10,4) NOT NULL COMMENT '输入价格：元/百万Token',
  `output_price` decimal(10,4) NOT NULL COMMENT '输出价格：元/百万Token',
  `input_per_cent` bigint NOT NULL COMMENT '1分钱可购买输入Token数',
  `output_per_cent` bigint NOT NULL COMMENT '1分钱可购买输出Token数',
  `unit` varchar(32) DEFAULT '百万Token' COMMENT '价格单位',
  `remark` varchar(255) DEFAULT '' COMMENT '备注',
  `created_time` datetime DEFAULT NULL,
  `updated_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_vendor` (`vendor`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='大模型Token价格表';

SET FOREIGN_KEY_CHECKS = 1;