386 lines
9.6 KiB
Markdown
386 lines
9.6 KiB
Markdown
|
|
# 数据库表结构说明
|
|||
|
|
|
|||
|
|
## 📊 表关系图
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
sys_user (用户表)
|
|||
|
|
│
|
|||
|
|
├─── account_fund (资金账户表) - 1:1
|
|||
|
|
│ │
|
|||
|
|
│ └─── account_flow (资金流水表) - 1:N
|
|||
|
|
│
|
|||
|
|
└─── account_trade (交易账户表) - 1:N
|
|||
|
|
│
|
|||
|
|
└─── order_trade (交易订单表) - 1:N
|
|||
|
|
|
|||
|
|
order_fund (充提订单表)
|
|||
|
|
│
|
|||
|
|
└─── account_flow (资金流水表)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 用户表 (sys_user)
|
|||
|
|
|
|||
|
|
**用途**: 存储用户基本信息
|
|||
|
|
|
|||
|
|
| 字段名 | 类型 | 说明 | 备注 |
|
|||
|
|
|--------|------|------|------|
|
|||
|
|
| id | bigint(20) | 主键ID | 自增 |
|
|||
|
|
| username | varchar(50) | 账号 | 唯一 |
|
|||
|
|
| password | varchar(100) | 密码 | BCrypt加密 |
|
|||
|
|
| nickname | varchar(50) | 昵称 | |
|
|||
|
|
| avatar | varchar(255) | 头像URL | |
|
|||
|
|
| phone | varchar(20) | 手机号 | |
|
|||
|
|
| email | varchar(100) | 邮箱 | |
|
|||
|
|
| kyc_status | tinyint(1) | KYC状态 | 0-未激活, 1-已激活 |
|
|||
|
|
| id_card_front | varchar(255) | 身份证正面照URL | |
|
|||
|
|
| id_card_back | varchar(255) | 身份证反面照URL | |
|
|||
|
|
| status | tinyint(1) | 状态 | 0-禁用, 1-正常 |
|
|||
|
|
| last_login_time | datetime | 最后登录时间 | |
|
|||
|
|
| last_login_ip | varchar(50) | 最后登录IP | |
|
|||
|
|
| token | varchar(500) | 当前Token | |
|
|||
|
|
| create_time | datetime | 创建时间 | |
|
|||
|
|
| update_time | datetime | 更新时间 | |
|
|||
|
|
|
|||
|
|
**索引**:
|
|||
|
|
- PRIMARY KEY (id)
|
|||
|
|
- UNIQUE KEY uk_username (username)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 资金账户表 (account_fund) ⭐ 充值目标
|
|||
|
|
|
|||
|
|
**用途**: 存储用户资金账户信息(USDT)
|
|||
|
|
|
|||
|
|
| 字段名 | 类型 | 说明 | 备注 |
|
|||
|
|
|--------|------|------|------|
|
|||
|
|
| id | bigint(20) | 主键ID | 自增 |
|
|||
|
|
| user_id | bigint(20) | 用户ID | 唯一,关联sys_user.id |
|
|||
|
|
| **balance** | decimal(20,8) | **USDT余额** | **⭐ 充值审批通过后增加** |
|
|||
|
|
| frozen | decimal(20,8) | 冻结金额 | 提现申请时冻结 |
|
|||
|
|
| **total_deposit** | decimal(20,8) | **累计充值** | **⭐ 充值审批通过后增加** |
|
|||
|
|
| total_withdraw | decimal(20,8) | 累计提现 | 提现成功后增加 |
|
|||
|
|
| create_time | datetime | 创建时间 | |
|
|||
|
|
| update_time | datetime | 更新时间 | |
|
|||
|
|
|
|||
|
|
**索引**:
|
|||
|
|
- PRIMARY KEY (id)
|
|||
|
|
- UNIQUE KEY uk_user_id (user_id)
|
|||
|
|
|
|||
|
|
**关系**:
|
|||
|
|
- 每个用户有且仅有一个资金账户
|
|||
|
|
- 1:1 关系(通过 user_id 唯一索引保证)
|
|||
|
|
|
|||
|
|
**充值审批逻辑**:
|
|||
|
|
```java
|
|||
|
|
// 充值审批通过时
|
|||
|
|
balance = balance + 充值金额
|
|||
|
|
total_deposit = total_deposit + 充值金额
|
|||
|
|
update_time = NOW()
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 交易账户表 (account_trade)
|
|||
|
|
|
|||
|
|
**用途**: 存储用户各币种持仓信息
|
|||
|
|
|
|||
|
|
| 字段名 | 类型 | 说明 | 备注 |
|
|||
|
|
|--------|------|------|------|
|
|||
|
|
| id | bigint(20) | 主键ID | 自增 |
|
|||
|
|
| user_id | bigint(20) | 用户ID | 关联sys_user.id |
|
|||
|
|
| coin_code | varchar(20) | 币种代码 | 如 BTC, ETH, USDT |
|
|||
|
|
| quantity | decimal(20,8) | 持仓数量 | |
|
|||
|
|
| frozen | decimal(20,8) | 冻结数量 | |
|
|||
|
|
| avg_price | decimal(20,8) | 平均成本价 | |
|
|||
|
|
| total_buy | decimal(20,8) | 累计买入数量 | |
|
|||
|
|
| total_sell | decimal(20,8) | 累计卖出数量 | |
|
|||
|
|
| create_time | datetime | 创建时间 | |
|
|||
|
|
| update_time | datetime | 更新时间 | |
|
|||
|
|
|
|||
|
|
**索引**:
|
|||
|
|
- PRIMARY KEY (id)
|
|||
|
|
- UNIQUE KEY uk_user_coin (user_id, coin_code)
|
|||
|
|
|
|||
|
|
**关系**:
|
|||
|
|
- 每个用户可以有多个交易账户(每个币种一个)
|
|||
|
|
- 1:N 关系
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 充提订单表 (order_fund)
|
|||
|
|
|
|||
|
|
**用途**: 存储充值和提现订单
|
|||
|
|
|
|||
|
|
| 字段名 | 类型 | 说明 | 备注 |
|
|||
|
|
|--------|------|------|------|
|
|||
|
|
| id | bigint(20) | 主键ID | 自增 |
|
|||
|
|
| order_no | varchar(32) | 订单号 | 唯一,F+时间戳 |
|
|||
|
|
| user_id | bigint(20) | 用户ID | 关联sys_user.id |
|
|||
|
|
| username | varchar(50) | 用户账号 | 冗余字段 |
|
|||
|
|
| type | tinyint(1) | 类型 | 1-充值, 2-提现 |
|
|||
|
|
| amount | decimal(20,8) | 金额(USDT) | |
|
|||
|
|
| wallet_id | bigint(20) | 钱包ID | 充值订单使用 |
|
|||
|
|
| wallet_address | varchar(255) | 钱包地址 | 充值/提现地址 |
|
|||
|
|
| withdraw_contact | varchar(100) | 提现联系方式 | |
|
|||
|
|
| **status** | tinyint(1) | **状态** | **见状态说明** |
|
|||
|
|
| pay_time | datetime | 用户打款时间 | |
|
|||
|
|
| confirm_time | datetime | 确认/审批时间 | |
|
|||
|
|
| approve_admin_id | bigint(20) | 审批管理员ID | |
|
|||
|
|
| approve_admin_name | varchar(50) | 审批管理员名称 | |
|
|||
|
|
| approve_time | datetime | 审批时间 | |
|
|||
|
|
| reject_reason | varchar(255) | 驳回原因 | |
|
|||
|
|
| remark | varchar(255) | 用户备注 | |
|
|||
|
|
| admin_remark | varchar(255) | 管理员备注 | |
|
|||
|
|
| create_time | datetime | 创建时间 | |
|
|||
|
|
| update_time | datetime | 更新时间 | |
|
|||
|
|
|
|||
|
|
**订单状态说明**:
|
|||
|
|
|
|||
|
|
**充值订单**:
|
|||
|
|
- 1 = 待付款(用户刚申请充值)
|
|||
|
|
- 2 = 待确认(用户已确认打款,等待管理员审批)⭐ 可审批
|
|||
|
|
- 3 = 已完成(管理员审批通过,余额已到账)
|
|||
|
|
- 4 = 已驳回(管理员审批驳回)
|
|||
|
|
- 5 = 已取消
|
|||
|
|
|
|||
|
|
**提现订单**:
|
|||
|
|
- 1 = 待审批(用户申请提现,等待管理员审批)⭐ 可审批
|
|||
|
|
- 2 = 已完成(管理员审批通过,已打款)
|
|||
|
|
- 3 = 已驳回(管理员审批驳回,余额已退还)
|
|||
|
|
- 4 = 已取消
|
|||
|
|
|
|||
|
|
**索引**:
|
|||
|
|
- PRIMARY KEY (id)
|
|||
|
|
- UNIQUE KEY uk_order_no (order_no)
|
|||
|
|
- KEY idx_user_id (user_id)
|
|||
|
|
- KEY idx_status (status)
|
|||
|
|
- KEY idx_type (type)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. 资金流水表 (account_flow)
|
|||
|
|
|
|||
|
|
**用途**: 记录资金账户的所有变动
|
|||
|
|
|
|||
|
|
| 字段名 | 类型 | 说明 | 备注 |
|
|||
|
|
|--------|------|------|------|
|
|||
|
|
| id | bigint(20) | 主键ID | 自增 |
|
|||
|
|
| user_id | bigint(20) | 用户ID | |
|
|||
|
|
| flow_no | varchar(32) | 流水号 | |
|
|||
|
|
| flow_type | tinyint(1) | 流水类型 | 见类型说明 |
|
|||
|
|
| amount | decimal(20,8) | 变动金额 | 正数=收入,负数=支出 |
|
|||
|
|
| balance_before | decimal(20,8) | 变动前余额 | |
|
|||
|
|
| balance_after | decimal(20,8) | 变动后余额 | |
|
|||
|
|
| coin_code | varchar(20) | 相关币种 | 默认USDT |
|
|||
|
|
| related_order_no | varchar(32) | 关联订单号 | |
|
|||
|
|
| remark | varchar(255) | 备注 | |
|
|||
|
|
| create_time | datetime | 创建时间 | |
|
|||
|
|
|
|||
|
|
**流水类型**:
|
|||
|
|
- 1 = 充值
|
|||
|
|
- 2 = 提现
|
|||
|
|
- 3 = 划转转入(资金账户 -> 交易账户)
|
|||
|
|
- 4 = 划转转出(交易账户 -> 资金账户)
|
|||
|
|
- 5 = 买入
|
|||
|
|
- 6 = 卖出
|
|||
|
|
|
|||
|
|
**充值审批流水记录**:
|
|||
|
|
```java
|
|||
|
|
flow_type = 1 (充值)
|
|||
|
|
amount = +100.00 (正数)
|
|||
|
|
balance_before = 0.00 (审批前余额)
|
|||
|
|
balance_after = 100.00 (审批后余额)
|
|||
|
|
coin_code = USDT
|
|||
|
|
related_order_no = F20260324001 (充值订单号)
|
|||
|
|
remark = "充值"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 充值完整流程示例
|
|||
|
|
|
|||
|
|
### 示例数据
|
|||
|
|
|
|||
|
|
**用户**: user1 (ID=1)
|
|||
|
|
|
|||
|
|
#### 1. 初始状态
|
|||
|
|
|
|||
|
|
**sys_user**:
|
|||
|
|
```
|
|||
|
|
id=1, username=user1, status=1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**account_fund** (资金账户):
|
|||
|
|
```
|
|||
|
|
id=1, user_id=1, balance=0.00, frozen=0.00,
|
|||
|
|
total_deposit=0.00, total_withdraw=0.00
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**account_trade** (交易账户 - USDT):
|
|||
|
|
```
|
|||
|
|
id=1, user_id=1, coin_code=USDT, quantity=0.00
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
#### 2. 申请充值(100 USDT)
|
|||
|
|
|
|||
|
|
**order_fund** (新建订单):
|
|||
|
|
```
|
|||
|
|
id=1, order_no=F20260324001, user_id=1, type=1,
|
|||
|
|
amount=100.00, status=1 (待付款)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**account_fund**: 无变化
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
#### 3. 确认打款
|
|||
|
|
|
|||
|
|
**order_fund**:
|
|||
|
|
```
|
|||
|
|
status=2 (待确认), pay_time=2026-03-24 10:30:00
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**account_fund**: 无变化
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
#### 4. 管理员审批通过 ⭐ 关键步骤
|
|||
|
|
|
|||
|
|
**order_fund**:
|
|||
|
|
```
|
|||
|
|
status=3 (已完成),
|
|||
|
|
approve_admin_id=1,
|
|||
|
|
approve_admin_name='管理员',
|
|||
|
|
approve_time=2026-03-24 11:00:00,
|
|||
|
|
confirm_time=2026-03-24 11:00:00
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**account_fund** (更新):
|
|||
|
|
```sql
|
|||
|
|
UPDATE account_fund
|
|||
|
|
SET balance = 0.00 + 100.00 = 100.00, -- ⭐ 余额增加
|
|||
|
|
total_deposit = 0.00 + 100.00 = 100.00, -- ⭐ 累计充值增加
|
|||
|
|
update_time = '2026-03-24 11:00:00'
|
|||
|
|
WHERE user_id = 1;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**account_flow** (新建流水):
|
|||
|
|
```
|
|||
|
|
id=1, user_id=1, flow_no=FL20260324001,
|
|||
|
|
flow_type=1 (充值),
|
|||
|
|
amount=100.00 (正数),
|
|||
|
|
balance_before=0.00,
|
|||
|
|
balance_after=100.00,
|
|||
|
|
coin_code=USDT,
|
|||
|
|
related_order_no=F20260324001,
|
|||
|
|
remark='充值',
|
|||
|
|
create_time=2026-03-24 11:00:00
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
#### 5. 最终状态
|
|||
|
|
|
|||
|
|
**account_fund**:
|
|||
|
|
```
|
|||
|
|
id=1, user_id=1,
|
|||
|
|
balance=100.00, -- ⭐ 已增加
|
|||
|
|
frozen=0.00,
|
|||
|
|
total_deposit=100.00, -- ⭐ 已增加
|
|||
|
|
total_withdraw=0.00
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔍 关键SQL查询
|
|||
|
|
|
|||
|
|
### 查询用户资金账户
|
|||
|
|
```sql
|
|||
|
|
SELECT
|
|||
|
|
u.id as user_id,
|
|||
|
|
u.username,
|
|||
|
|
af.balance,
|
|||
|
|
af.frozen,
|
|||
|
|
af.total_deposit,
|
|||
|
|
af.total_withdraw
|
|||
|
|
FROM sys_user u
|
|||
|
|
LEFT JOIN account_fund af ON u.id = af.user_id
|
|||
|
|
WHERE u.id = [用户ID];
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 查询用户交易账户
|
|||
|
|
```sql
|
|||
|
|
SELECT
|
|||
|
|
at.id,
|
|||
|
|
at.user_id,
|
|||
|
|
at.coin_code,
|
|||
|
|
at.quantity,
|
|||
|
|
at.frozen,
|
|||
|
|
at.avg_price,
|
|||
|
|
c.price as current_price,
|
|||
|
|
(at.quantity * c.price) as value_usdt
|
|||
|
|
FROM account_trade at
|
|||
|
|
LEFT JOIN coin c ON at.coin_code = c.code
|
|||
|
|
WHERE at.user_id = [用户ID] AND at.quantity > 0;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 查询充值订单及账户余额
|
|||
|
|
```sql
|
|||
|
|
SELECT
|
|||
|
|
of.order_no,
|
|||
|
|
of.user_id,
|
|||
|
|
of.amount as order_amount,
|
|||
|
|
of.status as order_status,
|
|||
|
|
of.approve_time,
|
|||
|
|
af.balance as current_balance,
|
|||
|
|
af.total_deposit
|
|||
|
|
FROM order_fund of
|
|||
|
|
LEFT JOIN account_fund af ON of.user_id = af.user_id
|
|||
|
|
WHERE of.order_no = '[订单号]';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚠️ 重要说明
|
|||
|
|
|
|||
|
|
### 资金账户 vs 交易账户
|
|||
|
|
|
|||
|
|
1. **资金账户 (account_fund)**:
|
|||
|
|
- 每个用户只有1个
|
|||
|
|
- 存储USDT余额
|
|||
|
|
- 充值/提现操作
|
|||
|
|
- 划转操作的来源/目标
|
|||
|
|
|
|||
|
|
2. **交易账户 (account_trade)**:
|
|||
|
|
- 每个用户可以有多个(每个币种一个)
|
|||
|
|
- 存储各币种持仓
|
|||
|
|
- 买入/卖出操作
|
|||
|
|
- 划转操作的目标/来源
|
|||
|
|
|
|||
|
|
### 充值资金流向
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
充值审批通过
|
|||
|
|
↓
|
|||
|
|
资金账户.balance += 充值金额 (⭐ 必须更新)
|
|||
|
|
资金账户.total_deposit += 充值金额 (⭐ 必须更新)
|
|||
|
|
↓
|
|||
|
|
创建资金流水记录
|
|||
|
|
↓
|
|||
|
|
用户可以:
|
|||
|
|
1. 提现(从资金账户扣除)
|
|||
|
|
2. 划转到交易账户(资金账户 -> 交易账户USDT)
|
|||
|
|
3. 用USDT买入其他币种(交易账户USDT -> 交易账户BTC/ETH等)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**最后更新**: 2026-03-24 13:45
|
|||
|
|
**数据库版本**: V1.0
|
|||
|
|
**字符集**: utf8mb4
|
|||
|
|
**引擎**: InnoDB
|