feat(api): GET /api/staff-stats 7类计数+分型明细(voice走user_id join,新客户add_time兜底,红包金额提取)
计数模式(无kind)返回 new_customers/new_groups/red_transfer/del_customers/
blocked_customers/voice_calls/sensitive_words(恒0,spec占位);明细模式
(?kind=)返回{kind,rows},每kind字段不同,前端按kind配列。start/end
缺省近7天。
口径(spec §4.5,全本地聚合):
- new_customers: add_time窗内;IS NULL行用该对话首条消息min(timestamp)兜底
- new_groups: chat_group.create_time窗内(复合PK按owner过滤)
- red_transfer: wechat type IN (red_packet,transfer)窗内;金额三路正则
(红包XML feedesc/转账纯文本/totalamount),实测真库转账399/399全提取
- del/blocked_customers: 现存量口径忽略窗口,明细time=updated_at毫秒
- voice_calls: phone_call.user_id存员工userId(32HEX)非wxId——先经
wechat_account.user_id换算,账号无uid返回空防跨员工串数
- voice明细字段语义对齐CallList.vue(connected=call_status==1,
media_url本地/api/media/{hash}优先OSS兜底)
真机smoke(yunke-mysql):voice 61条/新客67/删除29/拉黑1均通过;
转账金额100%提取。真库chat_group列与message.type回填滞后(运维项,另报)。
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -20,6 +20,7 @@ Includes:
|
||||
* ``GET /api/sync/status`` (see :mod:`app.api.routers.sync`).
|
||||
* ``GET /api/search`` (see :mod:`app.api.routers.search`).
|
||||
* ``GET /api/export/chat-html`` (see :mod:`app.api.routers.export`).
|
||||
* ``GET /api/staff-stats`` (see :mod:`app.api.routers.staff_stats`).
|
||||
|
||||
CORS is configured to read explicit allowed origins from ``Settings.cors_origins``
|
||||
(comma-separated ``CORS_ORIGINS`` env var). Empty (default) falls back to the dev
|
||||
@@ -53,6 +54,7 @@ from app.api.routers import (
|
||||
sessions,
|
||||
sms,
|
||||
staff_chat_stats,
|
||||
staff_stats,
|
||||
sync,
|
||||
voice_clips,
|
||||
)
|
||||
@@ -88,6 +90,7 @@ app.include_router(groups.router)
|
||||
app.include_router(calls.router)
|
||||
app.include_router(sms.router)
|
||||
app.include_router(staff_chat_stats.router)
|
||||
app.include_router(staff_stats.router)
|
||||
app.include_router(sync.router)
|
||||
app.include_router(search.router)
|
||||
app.include_router(sessions.router)
|
||||
|
||||
Reference in New Issue
Block a user