新增文件: 1. EMERGENCY_BALANCE_FIX.md - 充值审批余额未更新的紧急修复方案 2. verify_balance.sh - 自动化余额验证脚本 改进内容: - 添加详细的诊断步骤 - 添加数据库验证SQL - 添加日志检查方法 - 添加服务重启指南 这些工具用于帮助诊断和修复充值审批后资金账户余额未更新的问题
188 lines
5.3 KiB
Bash
Executable File
188 lines
5.3 KiB
Bash
Executable File
#!/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 "================================"
|