docs(changelog-v2): 站内信收件箱混排聊天-订单类消息恢复可见 (PR #4382)

这个提交包含在:
API Changelog Bot 2026-06-25 10:53:18 +08:00
父节点 996996c6f7
当前提交 50b65f0d41

查看文件

@ -0,0 +1,139 @@
# 站内信收件箱混排聊天消息(订单类消息恢复可见)(管理后台)
- **接口**GET /admin/message/list
- **变更类型**:修改接口(收件箱列表现在混排返回「聊天消息」+「系统通知」;出参 VO 新增 3 字段)
- **端类型**:管理后台
- **日期**2026-06-25
- **Issue**[#4381](https://git.1814.love:8443/wx/HL/issues/4381)
- **PR**[#4382](https://git.1814.love:8443/wx/HL/pulls/4382)
房务/车务在「站内信」收件箱里**看不到订单类聊天消息**聊天内容的问题已修复。收件箱列表GET /admin/message/list现按设计「聊天每条都落收件箱、与通知混排」返回系统通知kind=NOTIFY+ 聊天消息kind=CHAT按时间倒序混排。聊天消息的业务类型派生为「订单消息」messageType=ORDER,其 content 即聊天内容。出参 VO 新增 `kind`/`senderName`/`conversationKey` 三字段,供前端区分聊天行、显示发件人、跳转会话线程。
---
## 1 背景
站内信已升级为「聊天」后端聊天消息与系统通知共用一张收件箱admin_message,聊天行 kind=CHAT。原实现给收件箱列表查询误加了 `kind=NOTIFY` 过滤,把聊天行从列表里抹掉,导致:
- 顶部铃铛角标GET /admin/message/unread-count**有未读数字**(角标统计含聊天);
- 但点进站内信列表却**看不到聊天内容**(被 kind 过滤掉)。
本次去除该过滤,恢复混排。聊天行 bizType=HOUSE、bizId=订单ID,派生为「订单消息」,即用户口中的「订单类消息」。
---
## 2 变更清单
| # | 变更项 | 变更前 | 变更后 |
|---|--------|--------|--------|
| 1 | 收件箱列表返回内容 | 仅系统通知kind=NOTIFY | 系统通知 + 聊天消息kind=CHAT混排,createTime DESC |
| 2 | 出参 VO `kind` | 无 | 新增NOTIFY=系统通知 / CHAT=聊天消息 |
| 3 | 出参 VO `senderName` | 无 | 新增:聊天行发件人姓名(仅 kind=CHAT 有值,通知为 null |
| 4 | 出参 VO `conversationKey` | 无 | 新增:聊天行会话键(仅 kind=CHAT 有值,前端据此跳转会话线程,通知为 null |
| 5 | 聊天行 messageType | (此前不返回聊天行) | ORDER订单消息,messageTypeLabel=订单消息 |
| 6 | 顶部角标 unread-count | 含 NOTIFY+CHAT | 不变(本就含两者) |
> 接口路径 / 入参 / 鉴权不变;仅「列表返回内容」与「出参 VO 字段」变化,且 VO 为新增字段(向后兼容)。
---
## 3 出参字段AdminMessageRespVO,本次新增 3 字段加粗)
| 字段 | 类型 | 说明 |
|------|------|------|
| messageId | string | 消息 ID雪花,String 透传) |
| categoryCode | string | 分类编码;系统通知为 SYSTEM,**聊天消息为 null**(类型看 kind/messageType |
| title | string | 标题;聊天消息无标题null,正文看 content |
| content | string | 正文;聊天消息时即**聊天内容** |
| link | string | 跳转链接(通知用,聊天为 null |
| bizId | string | 关联业务 ID;聊天消息为订单 ID |
| bizType | string | 关联业务类型;聊天消息为 HOUSE |
| isRead | int | 0 未读 / 1 已读 |
| createTime | long | 创建时间戳ms |
| messageType | string | ORDER=订单消息 / NORMAL=普通消息(派生)。聊天消息恒为 ORDER |
| messageTypeLabel | string | 订单消息 / 普通消息 |
| **kind** | string | **NOTIFY=系统通知 / CHAT=聊天消息**(区分行类型) |
| **senderName** | string | **发件人姓名(仅 kind=CHAT 有值;系统通知为 null** |
| **conversationKey** | string | **会话键(仅 kind=CHAT 有值,前端据此跳转会话线程;系统通知为 null** |
---
## 4 前端接入指引(重要)
1. **区分行类型**:用 `kind` 判断渲染样式——`NOTIFY` 走原系统通知样式title+content+link`CHAT` 走聊天行样式(发件人 senderName + content=聊天内容,归类为「订单消息」)。
2. **聊天行点击 = 进会话线程**:点击 kind=CHAT 行时,用 `conversationKey` 进入会话线程(聊天线程/会话详情),由会话侧标记已读(会同步清掉该会话未读水位)。**不要对聊天行调 PUT /{id}/read 或 PUT /read-all 来标已读**。
3. **批量已读只清通知**PUT /read-all全部已读、PUT /category/{code}/read分类已读、GET /categories分类未读汇总**只作用于系统通知kind=NOTIFY,不碰聊天行**——聊天读态由会话维度权威维护(防误清未点开的聊天未读、防未读水位漂移)。所以点「全部已读」后聊天行仍可能保持未读,属预期。
4. **顶部角标**GET /admin/message/unread-count 含 NOTIFY+CHAT 全部未读(口径与列表一致)。
---
## 5 示例
请求
```
GET /admin/message/list?pageNo=1&pageSize=20
Authorization: Bearer <token>
```
响应(节选,混排:一条聊天 + 一条通知)
```json
{
"code": 200,
"msg": "success",
"data": {
"total": 26,
"records": [
{
"messageId": "20699...",
"kind": "CHAT",
"messageType": "ORDER",
"messageTypeLabel": "订单消息",
"senderName": "张三",
"conversationKey": "HOUSE:2069593503129636865",
"bizType": "HOUSE",
"bizId": "2069593503129636865",
"title": null,
"content": "改日期走修改订单 我没有权限",
"categoryCode": null,
"isRead": 0,
"createTime": 1750..."
},
{
"messageId": "20698...",
"kind": "NOTIFY",
"messageType": "ORDER",
"messageTypeLabel": "订单消息",
"senderName": null,
"conversationKey": null,
"bizType": "HOUSE",
"bizId": "2069...",
"title": "房务询单已超时",
"content": "订单 ... 的房务询单已超时未确认",
"categoryCode": "SYSTEM",
"isRead": 1,
"createTime": 1750..."
}
]
}
}
```
---
## 6 影响评估 / 回滚
破坏兼容性VO 为新增字段;老前端忽略新字段即可,原有字段不变)。
- 行为变化:收件箱列表会**多出聊天行**kind=CHAT,显示为订单消息。若前端未按 kind 区分渲染,聊天行会以「无标题、content=聊天内容」的形态出现在列表里——建议按第 4 节接入。
- 已在测试服实测adminadminId=1001收件箱 26 条21 聊天 + 5 通知)全部混排返回,与 DB 计数一致。
回滚方案:回滚后端至 #4382 前版本,收件箱恢复仅返系统通知(聊天行重新被隐藏)。
---
## 7 关联 / 联系人
- **Issue**[#4381](https://git.1814.love:8443/wx/HL/issues/4381)
- **PR**[#4382 站内信收件箱混排聊天——房务订单类消息恢复可见](https://git.1814.love:8443/wx/HL/pulls/4382)
- **设计依据**:站内信升级聊天 INAPP-CHAT v1.0 决策②(聊天每条都落收件箱、与通知混排)
- **后端负责人**王骁wx