fix: check-members.sh兼容生产库旧字段名(is_paid/paid_expires_at)
This commit is contained in:
@@ -105,6 +105,33 @@ OVERVIEW=$(psql_exec "$SQL_OVERVIEW") || {
|
||||
|
||||
IFS='|' read -r total_users total_members active_members expired_members permanent_members expiring_7d expiring_30d <<< "$OVERVIEW"
|
||||
|
||||
# 如果新字段名(is_member)查不到,用旧字段名(is_paid)重查
|
||||
if [ -z "$total_members" ] || [ "$total_members" = "0" ] && [ "$total_users" != "0" ]; then
|
||||
SQL_OVERVIEW_OLD=$(cat <<'SQL'
|
||||
SELECT
|
||||
COUNT(*) AS total_users,
|
||||
COUNT(*) FILTER (WHERE is_paid = true) AS total_members,
|
||||
COUNT(*) FILTER (WHERE is_paid = true AND paid_expires_at > NOW()) AS active_members,
|
||||
COUNT(*) FILTER (WHERE is_paid = true AND paid_expires_at <= NOW()) AS expired_members,
|
||||
COUNT(*) FILTER (WHERE is_paid = true AND paid_expires_at IS NULL) AS permanent_members,
|
||||
COUNT(*) FILTER (WHERE is_paid = true
|
||||
AND paid_expires_at IS NOT NULL
|
||||
AND paid_expires_at > NOW()
|
||||
AND paid_expires_at <= NOW() + INTERVAL '7 days') AS expiring_7d,
|
||||
COUNT(*) FILTER (WHERE is_paid = true
|
||||
AND paid_expires_at IS NOT NULL
|
||||
AND paid_expires_at > NOW()
|
||||
AND paid_expires_at <= NOW() + INTERVAL '30 days') AS expiring_30d
|
||||
FROM users;
|
||||
SQL
|
||||
)
|
||||
OVERVIEW=$(psql_exec "$SQL_OVERVIEW_OLD")
|
||||
IFS='|' read -r total_users total_members active_members expired_members permanent_members expiring_7d expiring_30d <<< "$OVERVIEW"
|
||||
USE_OLD_COLS=true
|
||||
else
|
||||
USE_OLD_COLS=false
|
||||
fi
|
||||
|
||||
# ---- 活跃会员列表 ----
|
||||
SQL_LIST=$(cat <<'SQL'
|
||||
SELECT
|
||||
@@ -130,7 +157,34 @@ ORDER BY
|
||||
SQL
|
||||
)
|
||||
|
||||
MEMBER_LIST=$(psql_exec "$SQL_LIST")
|
||||
if [ "$USE_OLD_COLS" = true ]; then
|
||||
SQL_LIST_OLD=$(cat <<'SQL'
|
||||
SELECT
|
||||
id,
|
||||
COALESCE(openid, 'N/A') AS openid,
|
||||
COALESCE(nickname, CONCAT('用户 #', id)) AS display_name,
|
||||
paid_expires_at::date AS expires_on,
|
||||
CASE
|
||||
WHEN paid_expires_at IS NULL THEN '永久'
|
||||
WHEN paid_expires_at <= NOW() THEN '已过期'
|
||||
ELSE CONCAT('剩 ', EXTRACT(DAY FROM paid_expires_at - NOW()), ' 天')
|
||||
END AS status,
|
||||
CASE
|
||||
WHEN paid_expires_at IS NULL THEN 99999
|
||||
WHEN paid_expires_at <= NOW() THEN -1
|
||||
ELSE EXTRACT(DAY FROM paid_expires_at - NOW())::int
|
||||
END AS days_left
|
||||
FROM users
|
||||
WHERE is_paid = true
|
||||
ORDER BY
|
||||
CASE WHEN paid_expires_at IS NULL THEN 0 ELSE 1 END,
|
||||
paid_expires_at DESC;
|
||||
SQL
|
||||
)
|
||||
MEMBER_LIST=$(psql_exec "$SQL_LIST_OLD")
|
||||
else
|
||||
MEMBER_LIST=$(psql_exec "$SQL_LIST")
|
||||
fi
|
||||
|
||||
# ---- 近期到期的活跃会员 ----
|
||||
SQL_EXPIRING=$(cat <<'SQL'
|
||||
|
||||
Reference in New Issue
Block a user