diff --git a/app/Linebot_handler/Expense.py b/app/Linebot_handler/Expense.py index a107bc1..67302e2 100755 --- a/app/Linebot_handler/Expense.py +++ b/app/Linebot_handler/Expense.py @@ -213,20 +213,41 @@ def query_today(line_user_id: str) -> str: db = SessionLocal() try: user_id = get_or_create_user(db, line_user_id) - rows = db.query(Expense).filter( - Expense.user_id == user_id, - text("DATE(date) = :today") - ).params(today=date.today()).all() + sql = text(""" + SELECT + COALESCE(m.display_name, e.item_name) AS display_name, + SUM(e.amount) as total_amount -- 💡 記得這裡是 amount + FROM expenses e + LEFT JOIN merchant_mapping m ON e.seller_name LIKE '%%' || m.pattern || '%%' + WHERE e.user_id = :user_id + AND e.date = CURRENT_DATE -- 💡 這是查今天的關鍵 + GROUP BY COALESCE(m.display_name, e.item_name) + ORDER BY total_amount DESC + """) + rows = db.execute(sql, {"user_id": user_id}).fetchall() - if not rows: - return "今天還沒有記錄 📭" + data_list = [dict(row) if hasattr(row, '_mapping') else row for row in rows] - total = sum(float(r.total_amount) for r in rows) - lines = [ - f"{i+1}. {r.item_name} ${float(r.amount):.0f}" + (f"({r.note})" if r.note else "") - for i, r in enumerate(rows) - ] - return "📋 今日記錄:\n" + "\n".join(lines) + f"\n\n💰 合計:${total:.0f}\n\n🗑 刪除請輸入:刪除 編號\n例如:刪除 1" + # 2. 計算總額 + total = sum(float(r['total_amount']) for r in data_list) + + if not data_list: + return "📋 今日還沒有記錄喔!💨" + + # 3. 組裝每一行的文字 (注意欄位改用 ['display_name'] 和 ['total_amount']) + lines = [] + for i, r in enumerate(data_list): + # 這裡用 display_name 才會顯示 merchant_mapping 轉換後的好記名稱 + name = r.get('display_name') or r.get('item_name') + amt = float(r['total_amount']) + note_str = f"({r['note']})" if r.get('note') else "" + + lines.append(f"{i+1}. {name} ${amt:.0f}{note_str}") + + # 4. 回傳最終訊息 + header = "📋 今日記錄:\n" + footer = f"\n\n💰 合計:${total:.0f}\n\n🗑 刪除請輸入:刪除 編號\n例如:刪除 1" + return header + "\n".join(lines) + footer except Exception as e: print("❌ 查詢失敗:", e) return "查詢失敗,請稍後再試"