fix: 协同留言时间改为北京时间

根因: ProductMessage.created_at 使用 datetime.utcnow (UTC),
      与其他所有模型使用的 get_beijing_time 不一致。
      看板留言抽屉显示的时间比实际晚8小时。

修复:
  1. message.py: DateTime → DateTime(timezone=True)
     default 从 datetime.utcnow → get_beijing_time
  2. dashboard_service.py: 兜底转换已有数据
     naive UTC → replace(tzinfo=UTC) → astimezone(Beijing)
This commit is contained in:
2026-08-12 13:55:33 +08:00
parent 3b53db03c1
commit ca195192b6
2 changed files with 9 additions and 3 deletions

View File

@ -6,6 +6,7 @@ from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column
from app.models.base import Base
from app.core.time_utils import get_beijing_time
class ProductMessage(Base):
@ -28,5 +29,5 @@ class ProductMessage(Base):
Text, nullable=False, comment="留言内容",
)
created_at: Mapped[datetime] = mapped_column(
DateTime, default=datetime.utcnow, comment="留言时间",
DateTime(timezone=True), default=get_beijing_time, comment="留言时间(北京时间)",
)

View File

@ -226,8 +226,13 @@ async def search_product_messages(
items: list[ProductMessageItem] = []
for msg, sn, mat_name in rows:
t = msg.created_at
if t and t.tzinfo is None:
t = t.replace(tzinfo=BEIJING_TZ)
if t:
if t.tzinfo is None:
# 旧数据datetime.utcnownaive UTC → 转北京时间
from datetime import timezone as dt_timezone
t = t.replace(tzinfo=dt_timezone.utc).astimezone(BEIJING_TZ)
else:
t = t.astimezone(BEIJING_TZ)
time_str = t.isoformat() if t else ""
items.append(ProductMessageItem(