From 16da52b5e94bdac887cbb7e64f2c7ebd373c296e Mon Sep 17 00:00:00 2001 From: xianze Date: Mon, 8 Jun 2026 11:55:35 +0800 Subject: [PATCH] =?UTF-8?q?fix(time):=20created=5Fat=20=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E5=AD=98=E5=8C=97=E4=BA=AC=E6=97=B6=E9=97=B4,=E4=BF=AE?= =?UTF-8?q?=E9=9D=A2=E5=90=91=E7=94=A8=E6=88=B7=E5=B1=95=E7=A4=BA=E6=85=A2?= =?UTF-8?q?=208h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit savings/comparison/wallet(金币·现金流水)/report 写入显式 created_at=datetime.now(CN_TZ).replace(tzinfo=None),替代 SQLite 下返回 UTC 的 server_default=func.now()。后台统计 admin/ops 依赖 created_at 是 UTC,不动。 Co-Authored-By: Claude Opus 4.8 (1M context) --- app/repositories/comparison.py | 13 ++++++++++++- app/repositories/report.py | 4 ++++ app/repositories/savings.py | 4 ++++ app/repositories/wallet.py | 4 ++++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/repositories/comparison.py b/app/repositories/comparison.py index acc0c66..e697be6 100644 --- a/app/repositories/comparison.py +++ b/app/repositories/comparison.py @@ -5,9 +5,12 @@ """ from __future__ import annotations +from datetime import datetime + from sqlalchemy import func, select from sqlalchemy.orm import Session +from app.core.rewards import CN_TZ from app.models.comparison import ComparisonRecord from app.models.savings import SavingsRecord from app.schemas.compare_record import ComparisonRecordIn @@ -104,7 +107,15 @@ def upsert_record( db.refresh(existing) return existing - rec = ComparisonRecord(user_id=user_id, trace_id=payload.trace_id, **fields) + # created_at 显式存 naive 北京 wall-clock(同 savings_record):客户端「比价记录」页 + # formatRecordTime 原样切片 created_at 字符串、不转时区,而默认 server_default=func.now() + # 在 SQLite 下返回 UTC → 直接慢 8h。覆盖分支不动 created_at(保留首次创建时间)。 + rec = ComparisonRecord( + user_id=user_id, + trace_id=payload.trace_id, + created_at=datetime.now(CN_TZ).replace(tzinfo=None), + **fields, + ) db.add(rec) db.commit() db.refresh(rec) diff --git a/app/repositories/report.py b/app/repositories/report.py index ef87bb1..7419489 100644 --- a/app/repositories/report.py +++ b/app/repositories/report.py @@ -1,9 +1,12 @@ """price_report 表读写。""" from __future__ import annotations +from datetime import datetime + from sqlalchemy import select from sqlalchemy.orm import Session +from app.core.rewards import CN_TZ from app.models.price_report import PriceReport @@ -35,6 +38,7 @@ def create_report( reported_price_cents=reported_price_cents, images=images, status="pending", + created_at=datetime.now(CN_TZ).replace(tzinfo=None), # 存北京 wall-clock(同 savings/comparison) ) db.add(rep) db.commit() diff --git a/app/repositories/savings.py b/app/repositories/savings.py index 7eb5fa4..5c8574d 100644 --- a/app/repositories/savings.py +++ b/app/repositories/savings.py @@ -179,6 +179,10 @@ def create_from_report( client_event_id=req.client_event_id, device_id=req.device_id, source="compare", + # created_at 显式存 naive 北京 wall-clock(与 demo 行、聚合 _local_date 的 naive 分支一致)。 + # 不用列默认 server_default=func.now()——SQLite 下它返回 UTC,会让明细页时间早 8 小时。 + # ⚠️ 生产 PG(timestamptz)对 naive 的解释与 SQLite 不同,迁前端到 PG 时需确认时区一致。 + created_at=datetime.now(CN_TZ).replace(tzinfo=None), ) db.add(rec) db.commit() diff --git a/app/repositories/wallet.py b/app/repositories/wallet.py index a0db153..957a25e 100644 --- a/app/repositories/wallet.py +++ b/app/repositories/wallet.py @@ -116,6 +116,7 @@ def grant_coins( biz_type=biz_type, ref_id=ref_id, remark=remark, + created_at=datetime.now(rewards.CN_TZ).replace(tzinfo=None), # 存北京 wall-clock(客户端原样切片显示) ) db.add(txn) db.flush() @@ -173,6 +174,7 @@ def exchange_coins_to_cash( balance_after_cents=acc.cash_balance_cents, biz_type="exchange_in", remark=remark, + created_at=datetime.now(rewards.CN_TZ).replace(tzinfo=None), ) ) db.commit() @@ -291,6 +293,7 @@ def _refund_withdraw( ref_id=order.out_bill_no, # 用户可见文案区分"未成功(自动退)"vs"审核未通过";技术原因记在 order.fail_reason remark="提现审核未通过,金额已退回" if final_status == "rejected" else "提现未成功,金额已退回", + created_at=datetime.now(rewards.CN_TZ).replace(tzinfo=None), ) ) order.status = final_status @@ -401,6 +404,7 @@ def create_withdraw( biz_type="withdraw", ref_id=out_bill_no, remark="提现到微信零钱(待审核)", + created_at=datetime.now(rewards.CN_TZ).replace(tzinfo=None), ) ) order = WithdrawOrder( -- 2.52.0