fix(track): 出库回调的时间戳带 +08:00 偏移,修 8 小时时差
current_time = datetime.now(beijing_tz).replace(tzinfo=None) 是**去掉时区的北京 墙上时间**。MOM 自己的库里 outbound_time/outbound_time 都是 naive timestamp, 本地这么存没问题;但它一旦以无偏移形式("2026-09-23T15:00:00")发给 Track, Track 的 timestamptz 列会按 **UTC** 解释 —— 实测发 15:00 存成 15:00+00, 前端在北京渲染成 23:00,整整差 8 小时。 用 replace(tzinfo=beijing_tz) 把真实时刻装回去,发出去即 "2026-09-23T15:00:00+08:00" —— 语义明确,不依赖接收方去猜。 ⚠️ 只改发给 Track 的这一处,**不动 current_time 本身**:它还要写进 MOM 自己的 naive 列(TransOutbound.outbound_time、TransRepair.shipping_date),在上面挂 tzinfo 会改变那些写入的行为。 ⚠️ 原有代码把 inbound_time / outbound_time 只拼进 remark 字符串、从不落库,所以 这个歧义此前一直没有暴露 —— 本次开始落 timestamptz 列才浮出来。 实测(Track 侧 lica_production): 发 "2026-09-23T15:00:00+08:00" → 存 07:00+00 AT TIME ZONE 'Asia/Shanghai' 读回 = 2026-09-23 15:00:00 ✅
This commit is contained in:
@ -459,8 +459,15 @@ class OutboundService:
|
||||
'request_no': approval.request_no,
|
||||
'consumer_name': common_data['consumer_name'],
|
||||
'applicant_name': approval._get_user_name(approval.applicant_id),
|
||||
# naive datetime 必须先转字符串,JSON 序列化不了
|
||||
'outbound_time': current_time.isoformat(),
|
||||
# ⚠️ 必须带 +08:00 偏移,不能直接发 current_time。
|
||||
# current_time 是 datetime.now(beijing_tz) 去掉 tzinfo 后的
|
||||
# **北京墙上时间**(MOM 自己的库是 naive 的 timestamp,所以
|
||||
# 本地这么存没问题)。但它一旦以无偏移的形式发出去,
|
||||
# Track 的 timestamptz 列会按 **UTC** 解释,实测整整差 8
|
||||
# 小时(发 15:00 存成 15:00+00,前端在北京渲染成 23:00)。
|
||||
# 这里把 tzinfo 装回去还原真实时刻,发出去就是明确的
|
||||
# "2026-09-23T15:00:00+08:00"。
|
||||
'outbound_time': current_time.replace(tzinfo=beijing_tz).isoformat(),
|
||||
'remark': common_data['remark'],
|
||||
})
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user