From 0fce21aaf7fe90bf3ebeae810e194242ee40566f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Wed, 9 Sep 2026 16:11:04 +0800 Subject: [PATCH] =?UTF-8?q?fix(management):=20=E5=9B=9E=E5=A1=ABCLI?= =?UTF-8?q?=E9=80=9A=E8=AF=9D=E6=97=A5=E5=B9=B6=E9=9B=86=E2=80=94=E2=80=94?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E7=A9=BA=E7=AA=97=E6=97=A5=E7=9A=84=E9=80=9A?= =?UTF-8?q?=E8=AF=9D=E4=B8=8D=E5=86=8D=E6=BC=8F(8=E5=A4=A927=E6=9D=A1?= =?UTF-8?q?=E5=AE=9E=E6=B5=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Code --- yunke-server/app/sync/cli.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/yunke-server/app/sync/cli.py b/yunke-server/app/sync/cli.py index 11372c6..ba5086a 100644 --- a/yunke-server/app/sync/cli.py +++ b/yunke-server/app/sync/cli.py @@ -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: