mirror of
https://github.com/henry4682/linebot_finance.git
synced 2026-05-16 04:41:52 +00:00
1. change expense query reponse string
This commit is contained in:
@@ -239,21 +239,38 @@ def query_month(line_user_id: str) -> str:
|
|||||||
try:
|
try:
|
||||||
user_id = get_or_create_user(db, line_user_id)
|
user_id = get_or_create_user(db, line_user_id)
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
rows = db.query(Expense).filter(
|
|
||||||
Expense.user_id == user_id,
|
sql = text("""
|
||||||
text("EXTRACT(YEAR FROM date) = :year AND EXTRACT(MONTH FROM date) = :month")
|
SELECT
|
||||||
).params(year=now.year, month=now.month).all()
|
COALESCE(m.display_name, e.item_name) AS display_name,
|
||||||
|
SUM(e.amount) as total_amount
|
||||||
|
FROM expenses e
|
||||||
|
LEFT JOIN merchant_mapping m ON e.seller_name LIKE '%' || m.pattern || '%'
|
||||||
|
WHERE e.user_id = :user_id
|
||||||
|
AND EXTRACT(YEAR FROM e.date) = :year
|
||||||
|
AND EXTRACT(MONTH FROM e.date) = :month
|
||||||
|
GROUP BY display_name
|
||||||
|
ORDER BY total_amount DESC
|
||||||
|
""")
|
||||||
|
|
||||||
|
rows = db.execute(sql, {"user_id": user_id, "year": now.year, "month": now.month}).fetchall()
|
||||||
|
|
||||||
if not rows:
|
if not rows:
|
||||||
return "本月還沒有記錄 📭"
|
return "本月還沒有記錄 📭"
|
||||||
|
|
||||||
total = sum(float(r.amount) for r in rows)
|
total = sum(float(r.amount) for r in rows)
|
||||||
summary = {}
|
summary = {}
|
||||||
for r in rows:
|
for row in rows:
|
||||||
key = r.item_name or "其他"
|
name = row.display_name
|
||||||
summary[key] = summary.get(key, 0) + float(r.amount)
|
amt = float(row.total_amount)
|
||||||
lines = [f"{cat}:${amt:.0f}" for cat, amt in sorted(summary.items(), key=lambda x: -x[1])]
|
percent = (amt / total) * 100
|
||||||
return f"📊 本月統計({now.month}月):\n" + "\n".join(lines) + f"\n\n💰 總計:${total:.0f}"
|
# 加上一點視覺效果
|
||||||
|
summary.append(f"🔹 {name}:${amt:.0f} ({percent:.1f}%)")
|
||||||
|
|
||||||
|
header = f"📊 {now.year}年{now.month}月 消費統計"
|
||||||
|
divider = "--------------------------"
|
||||||
|
footer = f"\n{divider}\n💰 本月總支出:${total:.0f}"
|
||||||
|
return f"{header}\n{divider}\n" + "\n".join(summary) + footer
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("❌ 查詢失敗:", e)
|
print("❌ 查詢失敗:", e)
|
||||||
return "查詢失敗,請稍後再試"
|
return "查詢失敗,請稍後再試"
|
||||||
|
|||||||
Reference in New Issue
Block a user