Files
monisuo/verify_balance.sh

188 lines
5.3 KiB
Bash
Raw Normal View History

#!/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 "================================"