3.4 KiB
3.4 KiB
立即修复余额显示为0的问题
问题
APP钱包页面显示余额为0,但后台管理系统中用户有余额。
最可能的原因
数据库中用户的 now_money 字段值为0。
立即执行的修复步骤
1. 连接数据库并执行SQL
# 连接到数据库
mysql -h 1.15.149.240 -u root -p zhibo
执行以下SQL:
-- 查看用户43的余额
SELECT uid, account, nickname, now_money FROM eb_user WHERE uid = 43;
-- 如果余额为0,给用户添加测试余额
UPDATE eb_user SET now_money = 1000.00 WHERE uid = 43;
-- 验证
SELECT uid, account, nickname, now_money FROM eb_user WHERE uid = 43;
2. 重新部署后端(确保使用最新代码)
# 运行部署脚本
deploy-balance-system.bat
3. 重新编译APP
在Android Studio中:
- Build -> Clean Project
- Build -> Rebuild Project
- Run 'app'
4. 测试验证
- 打开APP
- 登录账号 13800000043 / 123456
- 进入"我的"页面
- 点击"钱包"
- 应该看到余额显示为 1000.00
如果还是显示0
检查APP日志
adb logcat -c
adb logcat -s WalletActivity:D
然后在APP中打开钱包页面,查看日志输出。
可能的日志输出和对应问题
情况1: 看到 "Response code: 401"
- 问题:用户未登录或token过期
- 解决:重新登录APP
情况2: 看到 "Response code: 404"
- 问题:API路径错误
- 解决:检查后端是否部署成功
情况3: 看到 "Response code: 500"
- 问题:服务器错误
- 解决:查看后端日志
ssh root@1.15.149.240 "tail -100 /www/server/project/zhibo-h/logs/crmeb-front.log"
情况4: 看到 "Balance: 0.0"
- 问题:数据库中余额确实为0
- 解决:执行上面的SQL更新余额
情况5: 看到 "Data is null or no balance key"
- 问题:API返回的数据格式不对
- 解决:检查后端代码是否正确部署
使用curl直接测试API
# 1. 先登录获取token
curl -X POST http://1.15.149.240:8080/api/front/login \
-H "Content-Type: application/json" \
-d '{"account":"13800000043","password":"123456"}' \
| jq .
# 复制返回的token
# 2. 测试余额API
curl -H "Authorization: Bearer YOUR_TOKEN_HERE" \
http://1.15.149.240:8080/api/front/virtual-currency/balance \
| jq .
预期返回:
{
"success": true,
"code": 200,
"message": "操作成功",
"data": {
"balance": 1000.00,
"userId": 43
}
}
完整的测试流程
1. 数据库测试
-- 执行 fix_balance_display.sql 中的所有SQL
2. 后端测试
# 查看后端日志,确认API被调用
ssh root@1.15.149.240 "tail -f /www/server/project/zhibo-h/logs/crmeb-front.log | grep balance"
3. APP测试
- 打开钱包页面
- 查看logcat日志
- 确认余额显示
4. 充值测试
- 点击充值按钮
- 选择充值套餐
- 模拟支付
- 返回查看余额是否增加
注意事项
- 确保后端已部署最新代码:修改了
VirtualCurrencyController.java,必须重新编译部署 - 确保APP已重新编译:修改了
WalletActivity.java,必须重新编译安装 - 确保数据库有余额:
eb_user.now_money字段不能为0 - 确保用户已登录:token必须有效
快速验证命令
# 一键检查所有测试用户的余额
mysql -h 1.15.149.240 -u root -p -e "USE zhibo; SELECT uid, account, nickname, now_money FROM eb_user WHERE uid IN (43,44,45,46);"