From a13a08110577ff9b086a149fbd05ca8300c15733 Mon Sep 17 00:00:00 2001 From: pmc <740076875@qq.com> Date: Wed, 29 Apr 2026 17:14:51 +0800 Subject: [PATCH] feat: update device interaction views and modification log doc Co-Authored-By: Claude Sonnet 4.6 --- qy_lty/device_interaction/views.py | 4 +++ qy_lty/docs/修改记录.md | 39 ++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/qy_lty/device_interaction/views.py b/qy_lty/device_interaction/views.py index f1ee9a5..246c392 100644 --- a/qy_lty/device_interaction/views.py +++ b/qy_lty/device_interaction/views.py @@ -1435,7 +1435,11 @@ class VolcEngineTokenViewSet(viewsets.ViewSet): 'id': chat_msg.id, 'sender': sender, 'message': full_text[:2048], + # ISO8601 带时区(兼容旧客户端) 'timestamp': chat_msg.timestamp.isoformat(), + # Unix 秒级时间戳(无时区歧义):客户端优先用此字段比较 + # 解决 Unity Mono DateTime.TryParse 处理 ISO8601+timezone 不稳定导致的双倒 + 'timestamp_unix': int(chat_msg.timestamp.timestamp()), 'source_client': 'unknown', } } diff --git a/qy_lty/docs/修改记录.md b/qy_lty/docs/修改记录.md index 550c2a4..7392a1c 100644 --- a/qy_lty/docs/修改记录.md +++ b/qy_lty/docs/修改记录.md @@ -23,6 +23,45 @@ +### [2026-04-29] strategy B group_send 推回消息体新增 timestamp_unix 字段 + +配套手机端记录:`LTY_App_Project_URP/docs/修改记录.md` 同日"修复 B' 双倒真正根因:时间戳时区解析"条目。 + +手机端实测 B' 方案出现 UI 双倒,根因定位为:服务端 `chat_msg.timestamp.isoformat()` 输出 UTC 带时区的 ISO8601(如 `+00:00`),客户端 Unity Mono `DateTime.TryParse` 对此处理不稳定,可能丢失时区信息导致与本地时间戳比较时差 8 小时 → 替换匹配窗口(15s)永远不命中 → 走"作为新消息插入"兜底分支 → 双倒。 + +服务端最稳妥的修复方式:在 group_send payload 多附一个无时区歧义的 unix 秒级时间戳,让客户端优先使用。 + +#### 修改:strategy B 落库后 group_send payload 新增 timestamp_unix + +- **文件路径**: `device_interaction/views.py` +- **修改类型**: 增强 +- **修改内容**: + - `conversation_status` action 内字幕落库分支(约 L1438 附近)的 `channel_layer.group_send` payload 新增字段: + ```python + 'timestamp_unix': int(chat_msg.timestamp.timestamp()), + ``` + - 保留原 `timestamp` 字段(ISO8601)兼容老客户端,不破坏现有约定 +- **修改原因**: + - Unix 秒级时间戳是绝对值,跨语言跨时区零歧义 + - 客户端 `DateTimeOffset.FromUnixTimeSeconds(...).LocalDateTime` 转换可靠 + - 服务端代价极小(一次 `.timestamp()` 调用),收益是消除一类隐性双倒 bug + +#### 客户端配套改动(仅记录依赖关系) + +- `Assets/Scripts/AI/ChatLogManager.cs` 的 `ServerPersistedData` 结构体新增 `long timestamp_unix` 字段 +- `OnServerChatPersisted` 时间戳解析改为:优先 `timestamp_unix` > 0 → fallback `DateTimeOffset.TryParse(timestamp)` → fallback `DateTime.Now` +- `LoadChatHistoryFromServer` 同步改用 `DateTimeOffset.TryParse`(GET 接口暂未提供 unix 字段) + +#### 验证 + +服务端部署后,客户端 Console 应能在 `[匹配诊断]` 日志中看到 delta 缩小到秒级(之前是 ~28800s)。修复确认后客户端会删除诊断日志。 + +#### 待跟进 + +- `aiapp/views.py` 的 `RTCChatHistoryAPIView.get` 也可在响应里加 `timestamp_unix` 字段进一步收紧(非必须,因为 GET 路径双倒不直接受影响 —— 走的是覆盖式拉取) + +--- + ### [2026-04-29] 手机端聊天记录切换服务端字幕落库(B' 方案 服务端部分) 配套手机端方案文档:`LTY_App_Project_URP/docs/手机端聊天记录_切换服务端字幕落库方案.md`。手机端已实施 B'(本地 ASR 实时显示 + 服务端 webhook 静默替换),服务端需要补三件事:strategy B 落库后 group_send 推回客户端、DeviceConsumer 加 handler、RTCChatHistoryAPIView 灰度期去重 + since_id 增量拉取。