80 lines
2.9 KiB
Bash
Executable File
80 lines
2.9 KiB
Bash
Executable File
#!/bin/bash
|
||
# ===========================================
|
||
# 通过 SSH 在服务器上执行 SQL,使用户的付费时间过期
|
||
# 仅修改 membership_expires_at 到过去日期
|
||
# is_member 保持 true,is_active_member 会变为 false
|
||
# ===========================================
|
||
|
||
set -euo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
||
CONFIG_DIR="$PROJECT_ROOT/config"
|
||
ENV_FILE="$PROJECT_ROOT/.env"
|
||
|
||
get_ssh_host() {
|
||
grep '^SSH_SERVER=' "$ENV_FILE" 2>/dev/null | head -1 | cut -d'=' -f2- | tr -d '"' | tr -d "'" | xargs
|
||
}
|
||
|
||
usage() {
|
||
echo "用法: $0 <user_id> [--date YYYY-MM-DD]"
|
||
echo ""
|
||
echo " user_id 用户 ID(必填)"
|
||
echo " --date YYYY-MM-DD 指定到期日期(默认:昨天,即立即过期)"
|
||
echo ""
|
||
echo "示例:"
|
||
echo " $0 1 # 用户 1 立即过期"
|
||
echo " $0 1 --date 2025-01-01 # 用户 1 在 2025-01-01 过期"
|
||
exit 0
|
||
}
|
||
|
||
# ---------- 参数解析 ----------
|
||
USER_ID=""
|
||
EXPIRES_DATE=""
|
||
|
||
while [[ $# -gt 0 ]]; do
|
||
case "$1" in
|
||
--date) EXPIRES_DATE="$2"; shift 2 ;;
|
||
--dev) DB_NAME="milkydata_dev"; shift ;;
|
||
--help|-h) usage ;;
|
||
*) USER_ID="$1"; shift ;;
|
||
esac
|
||
done
|
||
|
||
[ -z "$USER_ID" ] && usage
|
||
|
||
# ---------- 连接信息 ----------
|
||
SSH_HOST=$(get_ssh_host)
|
||
[ -z "$SSH_HOST" ] && { echo "错误: 未配置 SSH_SERVER"; exit 1; }
|
||
|
||
DB_CONTAINER="1Panel-postgresql-FtMo"
|
||
DB_USER="milkydata"
|
||
echo ""
|
||
echo "═══════════════════════════════════════"
|
||
echo " 操作: 用户 ${USER_ID} 会员过期"
|
||
echo " 到期日: ${EXPIRES_DATE}"
|
||
echo " 数据库: ${DB_NAME}(${SSH_HOST})"
|
||
echo "═══════════════════════════════════════"
|
||
echo ""
|
||
echo "当前状态:"
|
||
CURRENT_SQL="SELECT id, name, is_member, membership_expires_at FROM users WHERE id = ${USER_ID};"
|
||
ssh "$SSH_HOST" "docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -c \"${CURRENT_SQL}\""
|
||
echo ""
|
||
echo "将要执行:"
|
||
echo " UPDATE users SET is_member = true, membership_expires_at = '"'"'${EXPIRES_DATE}'"'"'::date WHERE id = ${USER_ID};"
|
||
echo " → is_member 保持 true, is_active_member 变为 false"
|
||
echo ""
|
||
read -p "确认执行? [y/N] " -n 1 -r; echo
|
||
[[ ! $REPLY =~ ^[Yy]$ ]] && { echo "已取消"; exit 0; }
|
||
|
||
echo ""
|
||
echo "执行中..."
|
||
SQL="UPDATE users SET is_member = true, membership_expires_at = '"'"'${EXPIRES_DATE}'"'"'::date WHERE id = ${USER_ID};"
|
||
ssh "$SSH_HOST" "docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -c \"${SQL}\"" && echo "✅ 操作成功" || echo "❌ 操作失败"
|
||
|
||
echo ""
|
||
echo "验证结果:"
|
||
VERIFY_SQL="SELECT id, name, phone, type, is_member, is_admin, membership_expires_at FROM users WHERE id = ${USER_ID};"
|
||
ssh "$SSH_HOST" "docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -c \"${VERIFY_SQL}\""
|
||
echo ""
|