修改订单号规则,增加支付统计列表用户信息展示

This commit is contained in:
2026-06-11 14:26:56 +08:00
parent 28232e62a7
commit debc09877d
4 changed files with 16 additions and 8 deletions
@@ -70,6 +70,7 @@ const AdminPaymentStats: React.FC = () => {
const columns = [ const columns = [
{ title: '订单号', dataIndex: 'orderNo', key: 'orderNo', width: 200 }, { title: '订单号', dataIndex: 'orderNo', key: 'orderNo', width: 200 },
{ title: '用户', dataIndex: 'username', key: 'username', width: 120 },
{ {
title: '支付方式', dataIndex: 'paymentMethod', key: 'paymentMethod', width: 100, title: '支付方式', dataIndex: 'paymentMethod', key: 'paymentMethod', width: 100,
render: (m: string) => { render: (m: string) => {
+1 -1
View File
@@ -128,7 +128,7 @@ export interface PaymentOrder {
id: string; id: string;
orderNo: string; orderNo: string;
userId: string; userId: string;
user?: { username: string }; username?: string;
amount: number; amount: number;
credits: number; credits: number;
paymentMethod: string; paymentMethod: string;
+5 -3
View File
@@ -543,12 +543,13 @@ async def get_payment_stats(
recent_filters.append(PaymentOrder.created_at < query_end) recent_filters.append(PaymentOrder.created_at < query_end)
recent_result = await db.execute( recent_result = await db.execute(
select(PaymentOrder) select(PaymentOrder, User)
.join(User, PaymentOrder.user_id == User.id)
.where(*recent_filters) .where(*recent_filters)
.order_by(PaymentOrder.created_at.desc()) .order_by(PaymentOrder.created_at.desc())
.limit(50) .limit(50)
) )
recent = recent_result.scalars().all() recent_data = recent_result.all()
return { return {
"by_status": by_status, "by_status": by_status,
@@ -565,6 +566,7 @@ async def get_payment_stats(
"id": o.id, "id": o.id,
"order_no": o.order_no, "order_no": o.order_no,
"user_id": o.user_id, "user_id": o.user_id,
"username": u.username,
"amount": round(o.amount, 2), "amount": round(o.amount, 2),
"credits": round(o.credits, 2), "credits": round(o.credits, 2),
"payment_method": o.payment_method, "payment_method": o.payment_method,
@@ -573,7 +575,7 @@ async def get_payment_stats(
"paid_at": _iso(o.paid_at), "paid_at": _iso(o.paid_at),
"created_at": _iso(o.created_at), "created_at": _iso(o.created_at),
} }
for o in recent for o, u in recent_data
], ],
} }
+9 -4
View File
@@ -1,5 +1,7 @@
import time import time
import random import random
from datetime import datetime
import uuid
def generate_id() -> str: def generate_id() -> str:
@@ -10,7 +12,10 @@ def generate_id() -> str:
def generate_order_no() -> str: def generate_order_no() -> str:
"""Generate a human-readable order number.""" """Generate a human-readable order number with yyyymmddhhmmss format."""
timestamp = int(time.time()) # 格式化为 yyyymmddhhmmss 格式的时间戳
randomness = random.randint(1000, 9999) now = datetime.now()
return f"VG{timestamp}{randomness}" timestamp = now.strftime("%Y%m%d%H%M%S")
# 使用 UUID 的部分值来生成更可靠的随机数,防止并发冲突
random_part = uuid.uuid4().hex[:8].upper()
return f"MZZC{timestamp}{random_part}"