fix(management): 回填CLI通话日并集——消息空窗日的通话不再漏(8天27条实测)

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-09-09 16:11:04 +08:00
parent b2e8edacc2
commit 0fce21aaf7
+19 -5
View File
@@ -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: