-- ============================================= -- Fortis 虚拟货币模拟交易平台 - 完整初始化脚本 -- 日期: 2026-04-12 -- 适用: 新环境部署 -- ============================================= -- 创建数据库(如需) -- CREATE DATABASE IF NOT EXISTS `fortis_kny` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- USE `fortis_kny`; 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-正常', `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 '更新时间', `referral_code` varchar(8) DEFAULT NULL COMMENT '推广码', `referred_by` bigint(20) DEFAULT NULL COMMENT '推广人用户ID', PRIMARY KEY (`id`), UNIQUE KEY `uk_username` (`username`), UNIQUE KEY `uk_referral_code` (`referral_code`), KEY `idx_referred_by` (`referred_by`) ) 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-普通管理员 3-财务', `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', `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 '排序权重(越大越靠前)', `trade_start_time` varchar(5) DEFAULT '09:00' COMMENT '交易开始时间(HH:mm)', `trade_end_time` varchar(5) DEFAULT '23:00' COMMENT '交易结束时间(HH:mm)', `max_change_percent` decimal(5,2) DEFAULT '5.00' COMMENT '每日最大涨跌幅(%)', `simulation_enabled` tinyint(1) DEFAULT '0' COMMENT '是否开启K线模拟', `price_min` decimal(20,8) DEFAULT NULL COMMENT 'K线模拟最低价', `price_max` decimal(20,8) DEFAULT NULL COMMENT 'K线模拟最高价', `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); -- --------------------------------------------- -- 3b. K线蜡烛数据表 -- --------------------------------------------- DROP TABLE IF EXISTS `coin_kline`; CREATE TABLE `coin_kline` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `coin_code` varchar(20) NOT NULL COMMENT '币种代码', `interval` varchar(5) NOT NULL COMMENT '周期: 15m/1h/4h/1d/1M', `open_time` bigint(20) NOT NULL COMMENT '开盘时间戳(ms)', `open_price` decimal(20,8) NOT NULL, `high_price` decimal(20,8) NOT NULL, `low_price` decimal(20,8) NOT NULL, `close_price` decimal(20,8) NOT NULL, `volume` decimal(20,4) DEFAULT '0.0000' COMMENT '模拟成交量', `close_time` bigint(20) NOT NULL COMMENT '收盘时间戳(ms)', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_coin_interval_open` (`coin_code`, `interval`, `open_time`), KEY `idx_coin_interval_close` (`coin_code`, `interval`, `close_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='K线蜡烛数据表'; -- --------------------------------------------- -- 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 '交易币种代码', `coin_name` varchar(50) DEFAULT NULL COMMENT '币种名称', `type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '类型: 1-买 2-卖', `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`), KEY `idx_user_dir_status_time` (`user_id`, `direction`, `status`, `create_time`), KEY `idx_status_create_time` (`status`, `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)', `wallet_id` bigint(20) DEFAULT NULL COMMENT '冷钱包ID', `wallet_address` varchar(255) DEFAULT NULL COMMENT '充值地址/提现地址', `withdraw_contact` varchar(100) DEFAULT NULL COMMENT '提现联系方式', `network` varchar(20) DEFAULT NULL COMMENT '提现网络类型(TRC20/ERC20等)', `fee` decimal(18,2) DEFAULT NULL COMMENT '手续费', `receivable_amount` decimal(18,2) DEFAULT NULL COMMENT '到账金额', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '充值: 1-待付款 2-待确认 3-已完成 4-已驳回 5-已取消 | 提现: 1-待审批 2-已出款 3-已驳回 4-已取消 5-待财务审核', `reject_reason` varchar(255) DEFAULT NULL COMMENT '驳回原因', `remark` varchar(255) DEFAULT NULL COMMENT '用户备注', `admin_remark` varchar(255) DEFAULT NULL COMMENT '管理员备注', `pay_time` datetime DEFAULT NULL COMMENT '用户打款时间', `confirm_time` datetime DEFAULT NULL COMMENT '确认/审批时间', `approve_admin_id` bigint(20) DEFAULT NULL COMMENT '审批管理员ID', `approve_admin_name` varchar(50) DEFAULT NULL COMMENT '审批管理员名称', `approve_time` datetime DEFAULT NULL COMMENT '审批时间', `finance_admin_id` bigint(20) DEFAULT NULL COMMENT '财务审批管理员ID', `finance_admin_name` varchar(50) DEFAULT NULL COMMENT '财务审批管理员名称', `finance_approve_time` datetime 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` (`type`, `status`), 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`), KEY `idx_wallet_id` (`wallet_id`), KEY `idx_type_time_user` (`type`, `create_time`, `user_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`), KEY `idx_user_flow_type` (`user_id`, `flow_type`), KEY `idx_user_remark` (`user_id`, `remark`(20)) ) 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); SET FOREIGN_KEY_CHECKS = 1;