Files
monisuo/sql/init.sql
2026-04-21 08:09:45 +08:00

307 lines
17 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =============================================
-- 虚拟货币模拟交易平台 - 数据库初始化脚本
-- 数据库: monisuo
-- 版本: V1.0
-- =============================================
-- 设置字符集
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ---------------------------------------------
-- 1. 用户表
-- ---------------------------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`username` varchar(50) NOT NULL COMMENT '账号',
`password` varchar(100) NOT NULL COMMENT '密码(BCrypt加密)',
`nickname` varchar(50) DEFAULT NULL COMMENT '昵称',
`avatar` varchar(255) DEFAULT NULL COMMENT '头像URL',
`phone` varchar(20) DEFAULT NULL COMMENT '手机号',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`kyc_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'KYC状态: 0-未激活 1-已激活',
`id_card_front` varchar(255) DEFAULT NULL COMMENT '身份证正面照URL',
`id_card_back` varchar(255) DEFAULT NULL COMMENT '身份证反面照URL',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态: 0-禁用 1-正常',
`level` tinyint(1) NOT NULL DEFAULT '0' COMMENT '用户等级: 0-普通用户 1-会员用户',
`last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
`last_login_ip` varchar(50) DEFAULT NULL COMMENT '最后登录IP',
`token` varchar(500) DEFAULT NULL COMMENT '当前Token',
`refresh_token` varchar(512) DEFAULT NULL COMMENT '刷新Token',
`referral_code` varchar(8) DEFAULT NULL COMMENT '推广码',
`referred_by` bigint(20) DEFAULT NULL COMMENT '推广人用户ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`),
UNIQUE KEY `uk_referral_code` (`referral_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
-- ---------------------------------------------
-- 2. 管理员表
-- ---------------------------------------------
DROP TABLE IF EXISTS `sys_admin`;
CREATE TABLE `sys_admin` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`username` varchar(50) NOT NULL COMMENT '账号',
`password` varchar(100) NOT NULL COMMENT '密码(BCrypt加密)',
`nickname` varchar(50) DEFAULT NULL COMMENT '昵称',
`avatar` varchar(255) DEFAULT NULL COMMENT '头像URL',
`role` tinyint(1) NOT NULL DEFAULT '2' COMMENT '角色: 1-超级管理员 2-普通管理员',
`permissions` varchar(500) DEFAULT NULL COMMENT '权限列表(JSON格式)',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态: 0-禁用 1-正常',
`is_system` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否系统预置: 0-否 1-是',
`last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
`last_login_ip` varchar(50) DEFAULT NULL COMMENT '最后登录IP',
`token` varchar(500) DEFAULT NULL COMMENT '当前Token',
`refresh_token` varchar(512) DEFAULT NULL COMMENT '刷新Token',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员表';
-- 初始化超级管理员账号 (密码: saw123)
INSERT INTO `sys_admin` (`username`, `password`, `nickname`, `role`, `permissions`, `is_system`)
VALUES
('SupperadminWho1', '$2a$10$mk2IthNSTCQXNtT7AR9Sou3UsZPiPCrqwiJhqKu5mOb8CW0Dqdz2G', '超级管理员1', 1, 'all', 1),
('SupperadminWho2', '$2a$10$mk2IthNSTCQXNtT7AR9Sou3UsZPiPCrqwiJhqKu5mOb8CW0Dqdz2G', '超级管理员2', 1, 'all', 1);
-- ---------------------------------------------
-- 3. 币种表
-- ---------------------------------------------
DROP TABLE IF EXISTS `coin`;
CREATE TABLE `coin` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` varchar(20) NOT NULL COMMENT '币种代码(如BTC)',
`name` varchar(50) NOT NULL COMMENT '币种名称(如Bitcoin)',
`icon` varchar(255) DEFAULT NULL COMMENT '币种图标URL',
`price` decimal(20,8) NOT NULL DEFAULT '0.00000000' COMMENT '当前价格(USDT)',
`initial_price` decimal(20,8) DEFAULT NULL COMMENT '初始价格(首次调价时锁定)',
`price_usd` decimal(20,8) DEFAULT NULL COMMENT '美元价格',
`price_cny` decimal(20,8) DEFAULT NULL COMMENT '人民币价格',
`price_type` tinyint(1) NOT NULL DEFAULT '2' COMMENT '价格类型: 1-实时 2-管理',
`change_24h` decimal(10,4) DEFAULT '0.0000' COMMENT '24小时涨跌幅(%)',
`high_24h` decimal(20,8) DEFAULT NULL COMMENT '24小时最高价',
`low_24h` decimal(20,8) DEFAULT NULL COMMENT '24小时最低价',
`volume_24h` decimal(20,4) DEFAULT NULL COMMENT '24小时交易量',
`market_cap` decimal(20,2) DEFAULT NULL COMMENT '市值',
`total_supply` decimal(20,2) DEFAULT NULL COMMENT '总发行量',
`circulating_supply` decimal(20,2) DEFAULT NULL COMMENT '流通量',
`description` text COMMENT '币种简介',
`website` varchar(255) DEFAULT NULL COMMENT '官网链接',
`price_scale` int(11) DEFAULT '8' COMMENT '价格小数位',
`quantity_scale` int(11) DEFAULT '8' COMMENT '数量小数位',
`min_quantity` decimal(20,8) DEFAULT '0.00000001' COMMENT '最小交易数量',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态: 0-下架 1-上架',
`sort` int(11) DEFAULT '0' COMMENT '排序权重(越大越靠前)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='币种表';
-- 初始化实时币种
INSERT INTO `coin` (`code`, `name`, `icon`, `price`, `price_type`, `description`, `status`, `sort`) VALUES
('BTC', 'Bitcoin', '/static/coin/btc.png', 67000.00, 1, '比特币Bitcoin是一种点对点的电子现金系统由中本聪于2008年提出。', 1, 100),
('ETH', 'Ethereum', '/static/coin/eth.png', 3400.00, 1, '以太坊Ethereum是一个开源的区块链平台支持智能合约功能。', 1, 99),
('SOL', 'Solana', '/static/coin/sol.png', 170.00, 1, 'Solana是一个高性能区块链平台旨在支持去中心化应用的大规模采用。', 1, 98);
-- 初始化管理币种
INSERT INTO `coin` (`code`, `name`, `icon`, `price`, `price_type`, `description`, `status`, `sort`) VALUES
('USDT', 'Tether', '/static/coin/usdt.png', 1.0000, 2, '泰达币USDT是一种与美元挂钩的稳定币。', 1, 97),
('DOGE', 'Dogecoin', '/static/coin/doge.png', 0.15, 2, '狗狗币Dogecoin是一种基于Scrypt算法的加密货币。', 1, 96),
('XRP', 'Ripple', '/static/coin/xrp.png', 0.50, 2, '瑞波币XRP是Ripple网络的原生加密货币。', 1, 95);
-- ---------------------------------------------
-- 4. 资金账户表
-- ---------------------------------------------
DROP TABLE IF EXISTS `account_fund`;
CREATE TABLE `account_fund` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`balance` decimal(20,8) NOT NULL DEFAULT '0.00000000' COMMENT 'USDT余额',
`frozen` decimal(20,8) NOT NULL DEFAULT '0.00000000' COMMENT '冻结金额',
`total_deposit` decimal(20,8) NOT NULL DEFAULT '0.00000000' COMMENT '累计充值',
`total_withdraw` decimal(20,8) NOT NULL DEFAULT '0.00000000' COMMENT '累计提现',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='资金账户表';
-- ---------------------------------------------
-- 5. 交易账户表
-- ---------------------------------------------
DROP TABLE IF EXISTS `account_trade`;
CREATE TABLE `account_trade` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`coin_code` varchar(20) NOT NULL COMMENT '币种代码',
`quantity` decimal(20,8) NOT NULL DEFAULT '0.00000000' COMMENT '持仓数量',
`frozen` decimal(20,8) NOT NULL DEFAULT '0.00000000' COMMENT '冻结数量',
`avg_price` decimal(20,8) DEFAULT '0.00000000' COMMENT '平均成本价',
`total_buy` decimal(20,8) DEFAULT '0.00000000' COMMENT '累计买入数量',
`total_sell` decimal(20,8) DEFAULT '0.00000000' COMMENT '累计卖出数量',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_coin` (`user_id`, `coin_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易账户表';
-- ---------------------------------------------
-- 6. 交易订单表
-- ---------------------------------------------
DROP TABLE IF EXISTS `order_trade`;
CREATE TABLE `order_trade` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`order_no` varchar(32) NOT NULL COMMENT '订单号',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`coin_code` varchar(20) NOT NULL COMMENT '交易币种代码',
`direction` tinyint(1) NOT NULL COMMENT '交易方向: 1-买入 2-卖出',
`order_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '订单类型: 1-市价 2-限价',
`price` decimal(20,8) NOT NULL COMMENT '成交价格',
`quantity` decimal(20,8) NOT NULL COMMENT '成交数量',
`amount` decimal(20,8) NOT NULL COMMENT '成交金额(USDT)',
`fee` decimal(20,8) DEFAULT '0.00000000' COMMENT '手续费',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态: 1-成功 2-失败 3-已取消',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_order_no` (`order_no`),
KEY `idx_user_id` (`user_id`),
KEY `idx_coin_code` (`coin_code`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易订单表';
-- ---------------------------------------------
-- 7. 充提订单表
-- ---------------------------------------------
DROP TABLE IF EXISTS `order_fund`;
CREATE TABLE `order_fund` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`order_no` varchar(32) NOT NULL COMMENT '订单号',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`username` varchar(50) NOT NULL COMMENT '用户账号(冗余)',
`type` tinyint(1) NOT NULL COMMENT '类型: 1-充值 2-提现',
`amount` decimal(20,8) NOT NULL COMMENT '金额(USDT)',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态: 1-待审批 2-已完成 3-已驳回 4-已取消',
`approve_admin_id` bigint(20) DEFAULT NULL COMMENT '审批管理员ID',
`approve_admin_name` varchar(50) DEFAULT NULL COMMENT '审批管理员名称',
`approve_time` datetime DEFAULT NULL COMMENT '审批时间',
`reject_reason` varchar(255) DEFAULT NULL COMMENT '驳回原因',
`remark` varchar(255) DEFAULT NULL COMMENT '用户备注',
`admin_remark` varchar(255) DEFAULT NULL COMMENT '管理员备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_order_no` (`order_no`),
KEY `idx_user_id` (`user_id`),
KEY `idx_status` (`status`),
KEY `idx_type` (`type`),
KEY `idx_create_time` (`create_time`),
KEY `idx_type_status_time` (`type`, `status`, `create_time`),
KEY `idx_user_status` (`user_id`, `status`),
KEY `idx_approve_admin` (`approve_admin_id`),
KEY `idx_finance_admin` (`finance_admin_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='充提订单表';
-- ---------------------------------------------
-- 8. 资金流水表
-- ---------------------------------------------
DROP TABLE IF EXISTS `account_flow`;
CREATE TABLE `account_flow` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`flow_no` varchar(32) NOT NULL COMMENT '流水号',
`flow_type` tinyint(1) NOT NULL COMMENT '流水类型: 1-充值 2-提现 3-划转转入 4-划转转出 5-买入 6-卖出',
`amount` decimal(20,8) NOT NULL COMMENT '变动金额',
`balance_before` decimal(20,8) NOT NULL COMMENT '变动前余额',
`balance_after` decimal(20,8) NOT NULL COMMENT '变动后余额',
`coin_code` varchar(20) DEFAULT 'USDT' COMMENT '相关币种',
`related_order_no` varchar(32) DEFAULT NULL COMMENT '关联订单号',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_flow_type` (`flow_type`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='资金流水表';
-- ---------------------------------------------
-- 9. 系统配置表
-- ---------------------------------------------
DROP TABLE IF EXISTS `sys_config`;
CREATE TABLE `sys_config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`config_key` varchar(100) NOT NULL COMMENT '配置键',
`config_value` varchar(500) NOT NULL COMMENT '配置值',
`config_desc` varchar(255) DEFAULT NULL COMMENT '配置说明',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_config_key` (`config_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
-- 初始化系统配置
INSERT INTO `sys_config` (`config_key`, `config_value`, `config_desc`) VALUES
('withdraw_min', '10', '最小提现金额'),
('withdraw_max', '100000', '最大单笔提现金额'),
('withdraw_daily_max', '500000', '每日最大提现金额'),
('kyc_required', 'true', '交易前是否需要KYC');
-- ---------------------------------------------
-- 10. 自选币种表
-- ---------------------------------------------
DROP TABLE IF EXISTS `user_favorite`;
CREATE TABLE `user_favorite` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`coin_code` varchar(20) NOT NULL COMMENT '币种代码',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_coin` (`user_id`, `coin_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户自选币种表';
-- ---------------------------------------------
-- 11. 冷钱包地址表
-- ---------------------------------------------
DROP TABLE IF EXISTS `cold_wallet`;
CREATE TABLE `cold_wallet` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(50) NOT NULL COMMENT '钱包名称',
`address` varchar(255) NOT NULL COMMENT '钱包地址',
`network` varchar(20) NOT NULL DEFAULT 'TRC20' COMMENT '网络类型: TRC20/ERC20/BEP20等',
`is_default` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否默认: 0-否 1-是',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态: 0-禁用 1-启用',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_is_default` (`is_default`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='冷钱包地址表';
-- 插入默认测试钱包地址
INSERT INTO `cold_wallet` (`name`, `address`, `network`, `is_default`, `status`) VALUES
('USDT-TRC20 主钱包', 'TRX1234567890abcdefghijklmnopqrstuvwxyz1234', 'TRC20', 1, 1),
('USDT-ERC20 备用钱包', '0x1234567890abcdef1234567890abcdef12345678', 'ERC20', 0, 1);
-- 更新 order_fund 表结构
ALTER TABLE `order_fund`
ADD COLUMN `wallet_id` bigint(20) DEFAULT NULL COMMENT '钱包ID' AFTER `amount`,
ADD COLUMN `wallet_address` varchar(255) DEFAULT NULL COMMENT '钱包地址(充值地址/提现地址)' AFTER `wallet_id`,
ADD COLUMN `withdraw_contact` varchar(100) DEFAULT NULL COMMENT '提现联系方式' AFTER `wallet_address`,
ADD COLUMN `network` varchar(20) DEFAULT NULL COMMENT '提现网络类型(TRC20/ERC20等)' AFTER `withdraw_contact`,
ADD COLUMN `fee` decimal(18,2) DEFAULT NULL COMMENT '手续费' AFTER `network`,
ADD COLUMN `receivable_amount` decimal(18,2) DEFAULT NULL COMMENT '到账金额' AFTER `fee`,
ADD COLUMN `pay_time` datetime DEFAULT NULL COMMENT '用户打款时间' AFTER `remark`,
ADD COLUMN `confirm_time` datetime DEFAULT NULL COMMENT '确认/审批时间' AFTER `pay_time`,
ADD COLUMN `finance_admin_id` bigint(20) DEFAULT NULL COMMENT '财务审批管理员ID' AFTER `confirm_time`,
ADD COLUMN `finance_admin_name` varchar(50) DEFAULT NULL COMMENT '财务审批管理员名称' AFTER `finance_admin_id`,
ADD COLUMN `finance_approve_time` datetime DEFAULT NULL COMMENT '财务审批时间' AFTER `finance_admin_name`,
ADD INDEX `idx_wallet_id` (`wallet_id`);
SET FOREIGN_KEY_CHECKS = 1;