feat: alert wecom when no designer is available
This commit is contained in:
@@ -8,7 +8,7 @@ import sqlite3
|
||||
import os
|
||||
import threading
|
||||
from queue import Queue, Empty
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timedelta
|
||||
from typing import List, Dict, Optional
|
||||
|
||||
_DB_PATH = os.path.join(os.path.dirname(__file__), "chat_log_db", "chats.db")
|
||||
@@ -527,6 +527,49 @@ def get_latest_messages(limit: int = 20) -> List[Dict]:
|
||||
return [dict(r) for r in rows]
|
||||
|
||||
|
||||
def get_waiting_customer_pool(window_minutes: int = 30) -> Dict:
|
||||
"""统计最近窗口内、最后一条消息仍来自客户的待接待客户池。"""
|
||||
cutoff = (datetime.now() - timedelta(minutes=max(window_minutes, 1))).strftime("%Y-%m-%d %H:%M:%S")
|
||||
with _get_conn() as conn:
|
||||
rows = conn.execute(_sql("""
|
||||
SELECT id, customer_id, acc_id, direction, timestamp
|
||||
FROM chat_logs
|
||||
WHERE timestamp >= ?
|
||||
AND customer_id <> ''
|
||||
AND customer_id <> 'unknown'
|
||||
AND acc_id <> ''
|
||||
ORDER BY id DESC
|
||||
"""), (cutoff,)).fetchall()
|
||||
|
||||
latest_by_session = {}
|
||||
for row in rows:
|
||||
item = dict(row)
|
||||
key = (str(item.get("customer_id") or ""), str(item.get("acc_id") or ""))
|
||||
if key not in latest_by_session:
|
||||
latest_by_session[key] = item
|
||||
|
||||
per_shop: Dict[str, int] = {}
|
||||
waiting_sessions = 0
|
||||
for item in latest_by_session.values():
|
||||
if str(item.get("direction") or "") != "in":
|
||||
continue
|
||||
acc_id = str(item.get("acc_id") or "")
|
||||
if not acc_id:
|
||||
continue
|
||||
per_shop[acc_id] = per_shop.get(acc_id, 0) + 1
|
||||
waiting_sessions += 1
|
||||
|
||||
shops = [
|
||||
{"acc_id": acc_id, "waiting_customers": count}
|
||||
for acc_id, count in sorted(per_shop.items(), key=lambda kv: (-kv[1], kv[0]))
|
||||
]
|
||||
return {
|
||||
"total_waiting_customers": waiting_sessions,
|
||||
"shops": shops,
|
||||
"window_minutes": window_minutes,
|
||||
}
|
||||
|
||||
|
||||
# ========== 订单相关 ==========
|
||||
|
||||
@_retry_db_operation
|
||||
|
||||
Reference in New Issue
Block a user