From 5f50581ba1f10f60c27c3e9597408c4df35fdcce Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Mon, 10 Aug 2026 19:51:14 +0800 Subject: [PATCH] =?UTF-8?q?changelog(#5808):=20=E6=B6=88=E6=81=AF=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E7=BA=B3=E7=AE=A1=E8=BD=A6=E5=8A=A1=E5=9B=A2=E9=98=9F?= =?UTF-8?q?=E4=BC=9A=E8=AF=9D=E6=B6=88=E6=81=AF=EF=BC=88PR=20#5812?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...心纳管车务团队会话消息-修改接口-管理后台.md | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 changelogs-v2/2026-08/10_5808_消息中心纳管车务团队会话消息-修改接口-管理后台.md diff --git a/changelogs-v2/2026-08/10_5808_消息中心纳管车务团队会话消息-修改接口-管理后台.md b/changelogs-v2/2026-08/10_5808_消息中心纳管车务团队会话消息-修改接口-管理后台.md new file mode 100644 index 0000000..6dd5f90 --- /dev/null +++ b/changelogs-v2/2026-08/10_5808_消息中心纳管车务团队会话消息-修改接口-管理后台.md @@ -0,0 +1,73 @@ +--- +schema: "hl-changelog/v2" +ticket: "5808" +title: "消息中心纳管车务团队会话消息:list 混排团队池行 + teamMessage 字段 + read-all 三段清零" +consumer: "admin" +author: "wx(GIT)" +change_type: "修改接口" +backend_status: "deployed" +gateway_status: "not_required" +frontend_status: "pending" +frontend_owner: "mmg" +frontend_ref: "" +target_release: "" +verified_at: "2026-08-10" +status_note: "" +updated_at: "2026-08-10" +base: "dev-v3" +--- + +# 消息中心: 纳管车务团队会话消息(#5808) + +> **服务**: hl-user-service (8081) +> **PR**: #5812 +> **Issue**: #5808 +> **日期**: 2026-08-10 +> **影响范围**: /admin/message 五个端点(list/detail/{id}/read/read-all/{id} DELETE)+ SSE 共享 READ 信令载荷 +> **背景**: 车务管理员铃铛红点「全部已读」清不掉且列表找不到源头——FLEET 订单会话中定制师广播只落一行 admin_id=0 团队池行,个人收件箱无副本,此前消息中心既看不见也管不了它。本次把团队池行纳入消息中心管理。 + +--- + +## 变更接口 + +### 1. GET /admin/message/list — 车务角色下混排团队池聊天行 + 新增 teamMessage 字段 + +- 当前角色为 **VEHICLE_MANAGER** 时,列表在个人收件箱行之外混排**车务团队共享池聊天行**(全体车务共享同一份,含读态),按 createTime DESC 混排、分页 total 准确;其它角色行为不变。 +- **所有行**新增字段: + +| 字段 | 类型 | 说明 | +|------|------|------| +| `teamMessage` | boolean | **是否车务团队共享消息**。true=团队池行(全队共享读态:任一车务已读,全队该行变已读);false=个人行 | + +- 排序修正:同秒消息补 id 决胜列,翻页不再可能重复/丢行(对全部角色生效)。 +- messageType=ORDER/NORMAL、categoryCode 过滤与池行组合语义不变(池行属 ORDER=聊天类)。 + +**前端要做**:`teamMessage=true` 行渲染「团队」角标以区分个人消息;该类行的已读状态是全队共享的,不代表"我读过"。 + +### 2. GET /admin/message/{id} — 详情放行池行 + +车务管理员可查团队池行详情(返回体同样含 `teamMessage=true`);其它角色查池行仍返回 200401「站内信不存在或无权访问」。详情仍是纯查询不改已读。 + +### 3. PUT /admin/message/{id}/read — 池行单条已读=推进团队共享水位 + +对 `teamMessage=true` 行标已读:按会话**单调推进团队共享水位到该行**(该会话中更早的团队消息一并置已读,更晚的保持未读),**全体车务**红点同步回落;SSE 广播共享 READ 信令 + 定制师端点对点已读回执(同 #5797 语义)。重复调用幂等静默。 + +### 4. PUT /admin/message/read-all — 语义扩为三段清零 + +原来只清个人系统通知,现在依次清:①个人系统通知(现状)→ ②个人聊天逐会话推进个人水位(对端会收到已读回执)→ ③车务角色下全部 FLEET 团队会话推进共享水位到最新(**清掉全体车务的红点**,即 #4689「任一读、全队清零」语义的批量形态)。 + +执行后 `GET /admin/message/unread-count` 归 0。极端并发下个别会话正被读写会跳过(日志可查),再点一次即清完。**前端无需改动即受益**:铃铛红点从此「全部已读」必能点掉。 + +### 5. DELETE /admin/message/{id} — 池行禁删 + +对 `teamMessage=true` 行删除返回业务错误 **281014**「团队共享消息不可删除」(团队共享消息不允许单人删掉全队的记录)。**前端要做**:`teamMessage=true` 行隐藏/禁用删除入口。个人行删除行为不变。 + +### 6. SSE 共享 READ 信令载荷微调 + +`im-chat-read`(共享 READ)信封中 `conversationUnreadCount` 原恒为 0,现**部分已读时携带真实余量**(单条已读只推进到该行时,会话可能还有更晚的未读)。前端若有按该字段刷会话红点的逻辑,直接用下发值即可(原逻辑兼容)。 + +--- + +## 验证 + +测试服全链路实测通过(车务 token):unread-count=1 → list 见池行(teamMessage=true) → 详情 200 → DELETE 281014 → 单条已读 → unread-count=0 → read-all 幂等 → 超管反例不可见池行;HOUSE 留言池数据零影响。hl-user-service 全量 3578 单测绿。