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前端资产页面现在可以正确显示用户资产
- 充值审批后余额正确更新
- 资金账户数据查询正常
This commit is contained in:
107
test_asset_api.sh
Executable file
107
test_asset_api.sh
Executable file
@@ -0,0 +1,107 @@
|
||||
#!/bin/bash
|
||||
|
||||
BASE_URL="http://localhost:5010"
|
||||
|
||||
echo "================================"
|
||||
echo "测试资产API接口"
|
||||
echo "================================"
|
||||
|
||||
# 1. 用户登录
|
||||
echo -e "\n步骤1: 用户登录..."
|
||||
LOGIN_RESPONSE=$(curl -s -X POST "$BASE_URL/api/user/login" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"abcd","password":"abcd123"}')
|
||||
|
||||
echo "登录响应: $LOGIN_RESPONSE"
|
||||
TOKEN=$(echo $LOGIN_RESPONSE | python3 -c "
|
||||
import sys, json
|
||||
data = json.load(sys.stdin)
|
||||
if data.get('success'):
|
||||
print(data['data']['token'])
|
||||
" 2>/dev/null)
|
||||
|
||||
if [ -z "$TOKEN" ]; then
|
||||
echo "❌ 登录失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ 登录成功"
|
||||
echo "Token: ${TOKEN:0:30}..."
|
||||
|
||||
# 2. 测试资产总览接口
|
||||
echo -e "\n================================"
|
||||
echo "测试 /api/asset/overview 接口"
|
||||
echo "================================"
|
||||
OVERVIEW_RESPONSE=$(curl -s "$BASE_URL/api/asset/overview" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$OVERVIEW_RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$OVERVIEW_RESPONSE"
|
||||
|
||||
# 分析字段
|
||||
echo -e "\n字段分析:"
|
||||
echo "$OVERVIEW_RESPONSE" | python3 -c "
|
||||
import sys, json
|
||||
data = json.load(sys.stdin)
|
||||
if data.get('success') and data.get('data'):
|
||||
print('后端返回的字段:')
|
||||
for key in data['data'].keys():
|
||||
print(f' - {key}: {type(data[\"data\"][key]).__name__}')
|
||||
print('\nFlutter期望的字段:')
|
||||
print(' - totalAsset (总资产)')
|
||||
print(' - fundBalance (资金余额)')
|
||||
print(' - tradeBalance (交易余额)')
|
||||
print(' - totalProfit (总盈亏)')
|
||||
"
|
||||
|
||||
# 3. 测试资金账户接口
|
||||
echo -e "\n================================"
|
||||
echo "测试 /api/asset/fund 接口"
|
||||
echo "================================"
|
||||
FUND_RESPONSE=$(curl -s "$BASE_URL/api/asset/fund" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$FUND_RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$FUND_RESPONSE"
|
||||
|
||||
# 4. 测试交易账户接口
|
||||
echo -e "\n================================"
|
||||
echo "测试 /api/asset/trade 接口"
|
||||
echo "================================"
|
||||
TRADE_RESPONSE=$(curl -s "$BASE_URL/api/asset/trade" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$TRADE_RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$TRADE_RESPONSE"
|
||||
|
||||
echo -e "\n================================"
|
||||
echo "问题诊断"
|
||||
echo "================================"
|
||||
echo "$OVERVIEW_RESPONSE" | python3 -c "
|
||||
import sys, json
|
||||
data = json.load(sys.stdin)
|
||||
if data.get('success') and data.get('data'):
|
||||
backend_fields = set(data['data'].keys())
|
||||
flutter_expected = {'totalAsset', 'fundBalance', 'tradeBalance', 'totalProfit'}
|
||||
|
||||
print('后端返回字段:', sorted(backend_fields))
|
||||
print('Flutter期望字段:', sorted(flutter_expected))
|
||||
print()
|
||||
|
||||
missing = flutter_expected - backend_fields
|
||||
extra = backend_fields - flutter_expected
|
||||
|
||||
if missing:
|
||||
print('❌ 缺失字段:', sorted(missing))
|
||||
if extra:
|
||||
print('⚠️ 额外字段:', sorted(extra))
|
||||
|
||||
# 检查字段名称不匹配
|
||||
if 'totalAssets' in backend_fields and 'totalAsset' in flutter_expected:
|
||||
print('⚠️ 字段名称不匹配: totalAssets vs totalAsset')
|
||||
if 'tradeValue' in backend_fields and 'tradeBalance' in flutter_expected:
|
||||
print('⚠️ 字段名称不匹配: tradeValue vs tradeBalance')
|
||||
if 'totalProfit' not in backend_fields:
|
||||
print('⚠️ 缺失字段: totalProfit')
|
||||
"
|
||||
|
||||
echo "================================"
|
||||
echo "测试完成"
|
||||
echo "================================"
|
||||
Reference in New Issue
Block a user