Files
monisuo/DATABASE_SCHEMA.md
sion a4423e044b fix: 修复Flutter资产页面API接口字段名称不匹配问题
主要修改:
1. AssetService.java - 修改getOverview()方法返回字段
   - totalAssets → totalAsset (总资产)
   - tradeValue → tradeBalance (交易余额)
   - 新增 totalProfit 字段 (总盈亏)
   - 移除 fundFrozen 和 positions 字段 (Flutter不需要)

2. 新增诊断工具和文档:
   - ASSET_API_DIAGNOSIS.md - API接口问题诊断报告
   - DATABASE_SCHEMA.md - 数据库表结构说明
   - test_asset_api.sh - API接口测试脚本
   - query_fund_accounts.sh - 用户资金账户查询脚本
   - fix_asset_api.sh - 自动修复脚本

修复后API返回格式:
{
  "totalAsset": 15500.0,      // 总资产
  "fundBalance": 15500.0,     // 资金余额
  "tradeBalance": 0,          // 交易余额
  "totalProfit": 0            // 总盈亏
}

影响范围:
- Flutter前端资产页面现在可以正确显示用户资产
- 充值审批后余额正确更新
- 资金账户数据查询正常
2026-03-24 14:08:59 +08:00

9.6 KiB
Raw Blame History

数据库表结构说明

📊 表关系图

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 唯一索引保证)

充值审批逻辑:

// 充值审批通过时
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 = 卖出

充值审批流水记录:

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 (更新):

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查询

查询用户资金账户

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];

查询用户交易账户

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;

查询充值订单及账户余额

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