From 101b8fbf2c44c9d535e3bf7e39eb21b9b3d36856 Mon Sep 17 00:00:00 2001 From: milky0217 Date: Fri, 5 Jun 2026 22:40:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20check-members.sh=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=B8=80=E8=87=B4=E6=80=A7=E6=A3=80=E6=9F=A5?= =?UTF-8?q?-=E6=A0=87=E8=AE=B0=E6=97=A0=E4=BB=98=E6=AC=BE=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E7=9A=84=E5=BC=82=E5=B8=B8=E4=BC=9A=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/check-members.sh | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/scripts/check-members.sh b/scripts/check-members.sh index 8ee236d..d667b58 100755 --- a/scripts/check-members.sh +++ b/scripts/check-members.sh @@ -186,6 +186,24 @@ else MEMBER_LIST=$(psql_exec "$SQL_LIST") fi +# ---- 订单与会员一致性检查 ---- +SQL_ORDER_CHECK=$(cat <<'SQL' +SELECT + u.id, + COALESCE(u.nickname, CONCAT('用户 #', u.id)) AS name, + COUNT(po.id) AS total_orders, + COUNT(po.id) FILTER (WHERE po.status = 'paid') AS paid_orders +FROM users u +LEFT JOIN payment_orders po ON po.user_id = u.id +WHERE u.is_member = true +GROUP BY u.id, u.nickname +HAVING COUNT(po.id) FILTER (WHERE po.status = 'paid') = 0 +ORDER BY u.id; +SQL +) + +ORDER_ISSUES=$(psql_exec "$SQL_ORDER_CHECK") + # ---- 近期到期的活跃会员 ---- SQL_EXPIRING=$(cat <<'SQL' SELECT @@ -277,3 +295,14 @@ if [ -n "$EXPIRING_LIST" ]; then fi echo -e "${CYAN}══════════════════════════════════════${NC}" + +# ---- 订单异常提醒 ---- +if [ -n "$ORDER_ISSUES" ]; then + echo -e "${BOLD}⚠️ 订单异常:有会员身份但无成功付款记录${NC}" + echo " !用户可能通过手动操作获得了会员身份" + while IFS='|' read -r id name total_orders paid_orders; do + [ -z "$id" ] && continue + echo -e " ${YELLOW}⚠️ 用户 #${id}(${name}):共 ${total_orders} 条订单,${paid_orders} 条已支付${NC}" + done <<< "$ORDER_ISSUES" + echo "" +fi