Spaces:
Running
Running
个人资料交易记录中,增加销售统计模块
Browse files- router_wallet.py +48 -0
router_wallet.py
CHANGED
|
@@ -848,6 +848,54 @@ async def get_tip_stats(account: str, db: Session = Depends(get_db)):
|
|
| 848 |
}
|
| 849 |
}
|
| 850 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 851 |
# ==========================================
|
| 852 |
# 🔄 P7后悔模式:退款API
|
| 853 |
# ==========================================
|
|
|
|
| 848 |
}
|
| 849 |
}
|
| 850 |
|
| 851 |
+
@router.get("/api/wallet/{account}/sales-stats")
|
| 852 |
+
async def get_sales_stats(account: str, db: Session = Depends(get_db)):
|
| 853 |
+
"""
|
| 854 |
+
📊 获取用户销售统计
|
| 855 |
+
- 销售收入:来自 earn_balance(累计销售收益)
|
| 856 |
+
- 购买支出:来自 PURCHASE 类型的交易记录
|
| 857 |
+
"""
|
| 858 |
+
from sqlalchemy import func as sql_func
|
| 859 |
+
|
| 860 |
+
# 获取钱包信息(用于读取 earn_balance)
|
| 861 |
+
wallet = db.query(Wallet).filter(Wallet.account == account).first()
|
| 862 |
+
|
| 863 |
+
# 统计购买支出(PURCHASE类型交易)
|
| 864 |
+
purchase_stats = db.query(
|
| 865 |
+
sql_func.count(Transaction.tx_id).label('count'),
|
| 866 |
+
sql_func.coalesce(sql_func.sum(Transaction.amount), 0).label('total')
|
| 867 |
+
).filter(
|
| 868 |
+
Transaction.account == account,
|
| 869 |
+
Transaction.tx_type == "PURCHASE"
|
| 870 |
+
).first()
|
| 871 |
+
|
| 872 |
+
# 统计退款收入(REFUND类型,作为购买支出的反向操作)
|
| 873 |
+
refund_stats = db.query(
|
| 874 |
+
sql_func.count(Transaction.tx_id).label('count'),
|
| 875 |
+
sql_func.coalesce(sql_func.sum(Transaction.amount), 0).label('total')
|
| 876 |
+
).filter(
|
| 877 |
+
Transaction.account == account,
|
| 878 |
+
Transaction.tx_type == "REFUND"
|
| 879 |
+
).first()
|
| 880 |
+
|
| 881 |
+
total_sales = wallet.earn_balance or 0 if wallet else 0
|
| 882 |
+
total_purchase = abs(purchase_stats.total or 0)
|
| 883 |
+
purchase_count = purchase_stats.count or 0
|
| 884 |
+
|
| 885 |
+
# 净销售 = 销售收入 - 购买支出
|
| 886 |
+
net_sales = total_sales - total_purchase
|
| 887 |
+
|
| 888 |
+
return {
|
| 889 |
+
"status": "success",
|
| 890 |
+
"data": {
|
| 891 |
+
"total_sales": total_sales,
|
| 892 |
+
"sales_count": 0, # 目前无法精确统计销售笔数(没有卖家交易记录)
|
| 893 |
+
"total_purchase": total_purchase,
|
| 894 |
+
"purchase_count": purchase_count,
|
| 895 |
+
"net_sales": net_sales
|
| 896 |
+
}
|
| 897 |
+
}
|
| 898 |
+
|
| 899 |
# ==========================================
|
| 900 |
# 🔄 P7后悔模式:退款API
|
| 901 |
# ==========================================
|