fix(management): 回填CLI通话日并集——消息空窗日的通话不再漏(8天27条实测)
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -423,21 +423,35 @@ async def _cmd_employee_metrics(args: argparse.Namespace) -> int:
|
||||
try:
|
||||
import sqlalchemy as sa
|
||||
|
||||
from app.db.models import MsgDailyStats
|
||||
from app.db.models import MsgDailyStats, PhoneCall
|
||||
from app.storage.employee_metrics import (
|
||||
recompute_call_days,
|
||||
recompute_metric_days,
|
||||
)
|
||||
from app.storage.summary import day_key
|
||||
|
||||
async with session_maker() as session:
|
||||
days = (
|
||||
msg_days = (
|
||||
await session.execute(sa.select(MsgDailyStats.day).distinct())
|
||||
).scalars().all()
|
||||
rows = await recompute_metric_days(session, list(days))
|
||||
calls = await recompute_call_days(session, list(days))
|
||||
# 宽表全走消息派生源,只算消息日。
|
||||
rows = await recompute_metric_days(session, list(msg_days))
|
||||
# 通话日 = 消息日 ∪ 通话日:消息空窗日(节假日/同步缺口)的通话
|
||||
# 也要进小表。start_call_time→上海日必须在 Python 侧走 day_key
|
||||
# ——MySQL 会话时区是 UTC,SQL 日期函数会切错日。
|
||||
call_ts = (
|
||||
await session.execute(
|
||||
sa.select(PhoneCall.start_call_time)
|
||||
.where(PhoneCall.start_call_time.is_not(None))
|
||||
.distinct()
|
||||
)
|
||||
).scalars().all()
|
||||
call_days = sorted(set(msg_days) | {day_key(ts) for ts in call_ts})
|
||||
calls = await recompute_call_days(session, call_days)
|
||||
await session.commit()
|
||||
print(
|
||||
f"[employee-metrics] rebuilt {rows} wide rows, {calls} call rows"
|
||||
f"[employee-metrics] rebuilt {rows} wide rows, {calls} call rows "
|
||||
f"({len(call_days)} days)"
|
||||
)
|
||||
return 0
|
||||
finally:
|
||||
|
||||
Reference in New Issue
Block a user