Files
monisuo/verify_balance.sh
sion fb7bef6424 docs: 添加充值审批余额验证工具和紧急修复文档
新增文件:
1. EMERGENCY_BALANCE_FIX.md - 充值审批余额未更新的紧急修复方案
2. verify_balance.sh - 自动化余额验证脚本

改进内容:
- 添加详细的诊断步骤
- 添加数据库验证SQL
- 添加日志检查方法
- 添加服务重启指南

这些工具用于帮助诊断和修复充值审批后资金账户余额未更新的问题
2026-03-24 11:54:24 +08:00

188 lines
5.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 充值审批余额更新验证脚本
echo "================================"
echo "充值审批余额更新验证"
echo "================================"
echo ""
# 配置
BASE_URL="http://localhost:5010"
MYSQL_HOST="8.155.172.147"
MYSQL_USER="monisuo"
MYSQL_PASS="JPJ8wYicSGC8aRnk"
MYSQL_DB="monisuo"
# 1. 检查服务是否运行
echo "步骤1: 检查服务状态..."
if pgrep -f "monisuo-1.0.jar" > /dev/null; then
echo "✅ 服务正在运行"
echo " PID: $(pgrep -f 'monisuo-1.0.jar')"
else
echo "❌ 服务未运行!"
echo ""
echo "启动服务:"
echo "cd ~/Desktop/projects/monisuo"
echo "java -jar target/monisuo-1.0.jar --server.port=5010"
exit 1
fi
echo ""
# 2. 检查代码版本
echo "步骤2: 检查代码版本..."
cd ~/Desktop/projects/monisuo
LATEST_COMMIT=$(git log --oneline -1)
echo "最新提交: $LATEST_COMMIT"
if echo "$LATEST_COMMIT" | grep -q "06f546f"; then
echo "✅ 代码已是最新版本(包含余额更新修复)"
else
echo "⚠️ 代码可能不是最新版本"
echo " 建议执行: git pull origin main"
fi
echo ""
# 3. 检查日志文件
echo "步骤3: 检查最近审批日志..."
if [ -f "logs/spring.log" ]; then
echo "最近审批日志最后20行:"
echo "---"
grep -A20 "充值审批成功\|账户更新结果" logs/spring.log | tail -20
echo "---"
echo ""
# 检查是否有更新失败的日志
if grep -q "账户更新结果: 0" logs/spring.log; then
echo "❌ 发现账户更新失败的日志!"
echo " 查看详细日志: grep -A10 '账户更新结果: 0' logs/spring.log"
fi
# 检查是否有验证失败的日志
if grep -q "余额更新失败\|验证失败" logs/spring.log; then
echo "❌ 发现余额验证失败的日志!"
echo " 查看详细日志: grep -A10 '余额更新失败' logs/spring.log"
fi
else
echo "⚠️ 日志文件不存在: logs/spring.log"
fi
echo ""
# 4. 数据库验证
echo "步骤4: 数据库验证..."
echo "查询最近的充值订单..."
mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB << EOF
-- 查询最近5笔已完成的充值订单
SELECT
id,
order_no,
user_id,
amount,
status,
approve_time,
update_time
FROM order_fund
WHERE type = 1 AND status = 3
ORDER BY approve_time DESC
LIMIT 5;
EOF
echo ""
# 5. 提示用户输入订单号进行验证
echo "================================"
echo "详细验证"
echo "================================"
read -p "请输入订单号进行验证(直接回车跳过): " ORDER_NO
if [ -n "$ORDER_NO" ]; then
echo ""
echo "查询订单信息..."
mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB << EOF
SELECT
order_no,
user_id,
amount,
status,
approve_admin_id,
approve_time
FROM order_fund
WHERE order_no = '$ORDER_NO';
EOF
echo ""
# 获取用户ID
USER_ID=$(mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB -se "SELECT user_id FROM order_fund WHERE order_no='$ORDER_NO'")
if [ -n "$USER_ID" ]; then
echo "查询用户资金账户user_id=$USER_ID..."
mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB << EOF
SELECT
id,
user_id,
balance,
total_deposit,
update_time
FROM account_fund
WHERE user_id = $USER_ID;
EOF
echo ""
echo "查询资金流水记录..."
mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB << EOF
SELECT
flow_no,
flow_type,
amount,
balance_before,
balance_after,
related_order_no,
create_time
FROM account_flow
WHERE related_order_no = '$ORDER_NO'
ORDER BY create_time DESC;
EOF
echo ""
# 计算预期余额
AMOUNT=$(mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB -se "SELECT amount FROM order_fund WHERE order_no='$ORDER_NO'")
CURRENT_BALANCE=$(mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB -se "SELECT balance FROM account_fund WHERE user_id=$USER_ID")
echo "================================"
echo "余额验证"
echo "================================"
echo "充值金额: $AMOUNT"
echo "当前余额: $CURRENT_BALANCE"
echo ""
# 获取充值前余额(从流水记录)
BALANCE_BEFORE=$(mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB -se "SELECT balance_before FROM account_flow WHERE related_order_no='$ORDER_NO' ORDER BY create_time DESC LIMIT 1")
if [ -n "$BALANCE_BEFORE" ]; then
EXPECTED_BALANCE=$(echo "$BALANCE_BEFORE + $AMOUNT" | bc)
echo "充值前余额: $BALANCE_BEFORE"
echo "预期余额: $EXPECTED_BALANCE"
echo ""
if [ "$CURRENT_BALANCE" == "$EXPECTED_BALANCE" ]; then
echo "✅ 余额正确!"
else
echo "❌ 余额不匹配!"
echo " 预期: $EXPECTED_BALANCE"
echo " 实际: $CURRENT_BALANCE"
echo ""
echo "可能的原因:"
echo "1. 事务回滚了"
echo "2. 更新被其他操作覆盖"
echo "3. 代码未正确执行"
fi
else
echo "⚠️ 未找到流水记录"
fi
fi
fi
echo ""
echo "================================"
echo "诊断完成"
echo "================================"