docs(changelog): 主题列表 createdByName 字段已上线测试服, 覆盖 heads-up 版

覆盖之前的 heads-up changelog (commit fd6e7b1) — 测试服 API 真测过, 字段 5/5 条全在 + 全非 null:
- 王骁/小松 (企微昵称)
- admin/test_admin (username fallback)

PR #1944 已合并到 dev, dep.test.1814.love 滚动部署完成 (42s 双实例 OK)。
前端 mmg 可以直接接 createdByName 字段。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
这个提交包含在:
API Changelog Bot 2026-05-11 17:32:47 +08:00
父节点 fd6e7b104f
当前提交 7ce411a1b2

查看文件

@ -1,45 +1,65 @@
# 管理端主题列表: 卡片新增「创建人姓名」字段(企微昵称优先 fallback 用户名) # 管理端主题列表: 卡片新增「创建人姓名」字段 createdByName(企微昵称优先 fallback 用户名)
> **服务**: hl-product-service-v2 (端口 8083) > **服务**: hl-product-service-v2 (端口 8083)
> **PR**: 待开(后端开发中) > **PR**: [#1944](https://git.1814.love:8443/wx/HL/pulls/1944) — 已合并到 dev
> **Issue**: [#1943](https://git.1814.love:8443/wx/HL/issues/1943) > **Issue**: [#1943](https://git.1814.love:8443/wx/HL/issues/1943) — 已关闭
> **日期**: 2026-05-11 > **日期**: 2026-05-11
> **影响范围**: 管理后台「产品管理 → 主题列表」(/product/line) 卡片 > **影响范围**: 管理后台「产品管理 → 主题列表」(/product/line) 卡片
> **状态**: ⚠️ **预告 (Heads-up)** — 后端尚未合并,前端可同步开始;字段名/格式以本文为准,PR 合并后会再补一条"已上线"changelog > **状态**: **已上线测试服**dev 分支 → dep.test.1814.love 部署 → API 已验证)
--- ---
## ⚠️ 关键变化 ## ⚠️ 关键变化(覆盖本日早些时候那条 heads-up
主题列表卡片每张多一个字段 `createdByName`String,可能为 null,用于显示是谁创建了这个主题 主题列表卡片每张多一个字段 **`createdByName`**String,可能为 null
**显示规则(后端已实现)** **显示规则(后端已实现)**
- 创建人 admin_user 绑定了企业微信 → 返回**企业微信昵称** - 创建人 admin_user 绑定了企业微信 → 返回**企业微信昵称**
- 未绑企微 → 返回 **admin_user.username**(用户名兜底) - 未绑企微 → 返回 **admin_user.username**(用户名兜底)
- 极端情况user-service 降级 / admin 已删)→ 返回 null,前端可显示「-」或隐藏该行 - 极端情况user-service 降级 / admin 已删)→ 返回 null
前端**无需自己 fallback**,后端已聚合好,前端直接展示 `createdByName` 即可。 前端**无需自己 fallback**,后端已聚合好,直接展示 `createdByName` 即可。
--- ---
## 一、背景 ## 一、测试服已验证 (硬性凭证)
超级管理员/运营组长视角下,主题列表 27 张卡片看不出谁建的,特别是私人定制类主题(不同销售各自开),需要快速识别 owner。 ```
GET https://api.test.1814.love:9443/admin/product/line/list?pageNo=1&pageSize=5
Authorization: Bearer <admin token>
HTTP 200
data.records[*].createdByName 字段存在性: 5/5 条全部都有 ✓
非 null 命中: 5/5 条 (createdBy 有值的全部回填) ✓
实测样本:
lineId=2053279457388494849 createdBy=2021059720172838914 createdByName='王骁'
lineId=2053278451187535873 createdBy=2021059720172838914 createdByName='王骁'
lineId=2053060320829599746 createdBy=1001 createdByName='admin' (username fallback)
lineId=2053060194102898690 createdBy=1002 createdByName='test_admin' (username fallback)
lineId=2049467101390819329 createdBy=2033349910786715649 createdByName='小松' (企微昵称)
```
--- ---
## 二、变更接口清单 ## 二、背景
超级管理员/运营组长视角下,主题列表卡片看不出谁建的,特别是私人定制类主题(不同销售各自开),需要快速识别 owner。
---
## 三、变更接口清单
| # | 接口 | 方法 | 路径 | 变更类型 | 说明 | | # | 接口 | 方法 | 路径 | 变更类型 | 说明 |
|---|------|------|------|----------|------| |---|------|------|------|----------|------|
| 1 | 主题列表 | GET | `/admin/product/line/list` | 响应体新增字段 | 每条多 `createdByName` | | 1 | 主题列表 | GET | `/admin/product/line/list` | 响应体新增字段 | 每条多 `createdByName` |
| 2 | 主题详情 | GET | `/admin/product/line/{lineId}` | 响应体新增字段 | 多 `createdByName` | | 2 | 主题详情 | GET | `/admin/product/line/{lineId}` | 响应体新增字段 | 多 `createdByName` |
后端 0 个 break、0 个删除、0 个语义变化。仅追加字段,前端不接也不会报错。 后端 0 个 break、0 个删除、0 个语义变化。仅追加字段。
--- ---
## 、接口详情 ## 、接口详情
### 1. 主题列表 `GET /admin/product/line/list` ### 1. 主题列表 `GET /admin/product/line/list`
@ -63,30 +83,18 @@
"code": 200, "code": 200,
"message": "成功", "message": "成功",
"success": true, "success": true,
"data": [ "data": {
{ "records": [
"lineId": 2045311111111111111, {
"name": "游牧的森林", "lineId": "2053279457388494849",
"createdBy": 1002, "name": "私人订制",
"createdByName": "王宇", "createdBy": "2021059720172838914",
"createTime": "2026-04-17 12:59:24", "createdByName": "王骁",
"...其他字段": "..." "createTime": "2026-05-10 09:02:25",
}, "...其他字段": "..."
{ }
"lineId": 2045322222222222222, ]
"name": "嗨冰雪", }
"createdBy": 1003,
"createdByName": "test_admin",
"createTime": "..."
},
{
"lineId": 2045333333333333333,
"name": "私人定制",
"createdBy": 1099,
"createdByName": null,
"...": "..."
}
]
} }
``` ```
@ -96,22 +104,11 @@
--- ---
## 、前端实现要点 ## 、前端实现要点
### UI 位置(建议) ### UI 位置(建议)
主题卡片当前布局(图示): 主题卡片在「创建时间」一行旁边或上面加一行「创建人: xxx」,排版方式由前端拍板。
```
[封面图]
[主题名] [核心产品/私人定制 标签]
[简介]
[季节/标签 chips]
[版本数] [排序]
[启用] [创建时间]
[👁 编辑 删除按钮]
```
建议在「创建时间」一行旁边或上面加一行「创建人: xxx」,排版方式由前端拍板。
### Null 处理 ### Null 处理
@ -124,17 +121,16 @@
--- ---
## 、不影响范围 ## 、不影响范围
- ✅ MP 端任何接口0 改动C 端不需要看创建人) - ✅ MP 端任何接口0 改动C 端不需要看创建人)
- ✅ 主题创建/编辑/删除接口0 改动(写入侧不受影响) - ✅ 主题创建/编辑/删除接口0 改动(写入侧不受影响)
- ✅ 现有筛选条件(关键字/状态/主题类型0 改动 - ✅ 现有筛选条件(关键字/状态/主题类型0 改动
- ✅ 历史 27 条主题数据无需迁移createdBy 已写入,靠 enrich 实时取,老数据如 createdBy 已删则返 null - ✅ 历史 27 条主题数据无需迁移createdBy 已写入,靠 enrich 实时取,老数据如 createdBy 已删则返 null
- ✅ 装备模板下拉、产品列表、其他列表:本次不涉及
--- ---
## 、降级/边界 ## 、降级/边界
- user-service 降级Feign 失败)→ 后端 catch 异常,所有 createdByName 返 null,列表照常返回,**不阻断页面** - user-service 降级Feign 失败)→ 后端 catch 异常,所有 createdByName 返 null,列表照常返回,**不阻断页面**
- batchGetAdminInfo 返空admin 已删)→ 该条 createdByName = null - batchGetAdminInfo 返空admin 已删)→ 该条 createdByName = null
@ -142,19 +138,20 @@
--- ---
## 、相关历史 ## 、相关历史
| PR | Issue | 说明 | 是否仍有效 | | PR | Issue | 说明 | 是否仍有效 |
|----|-------|------|------------| |----|-------|------|------------|
| 待开 PR | #1943 | 主题列表/详情新增 createdByName | 🚧 开发中 | | **#1944** | #1943 | 主题列表/详情新增 createdByName | ✅ **本次**(已合 dev + 测试服已验证) |
参考类似实现:产品列表 `ProductQueryService.enrichCreatedByName():243-267`(已上线,前端已使用 `createdByName` 字段)。 参考类似实现:产品列表 `ProductQueryService.enrichCreatedByName():243-267`(已上线很久,前端已使用 `createdByName` 字段)。
--- ---
## 、相关文档 ## 、相关文档
- 关联 Issue: [wx/HL#1943](https://git.1814.love:8443/wx/HL/issues/1943) - 关联 Issue: [wx/HL#1943](https://git.1814.love:8443/wx/HL/issues/1943)
- 关联 PR: [wx/HL#1944](https://git.1814.love:8443/wx/HL/pulls/1944)
- Feign 接口: `hl-common/hl-common-feign/.../UserFeignClient.java:36-37` - Feign 接口: `hl-common/hl-common-feign/.../UserFeignClient.java:36-37`
- AdminBasicDTO: `hl-common/hl-common-core/.../AdminBasicDTO.java:17,25-26` - AdminBasicDTO: `hl-common/hl-common-core/.../AdminBasicDTO.java:17,25-26`
- 仿写模板: `hl-product-service-v2/.../ProductQueryService.java:243-267` - 仿写模板: `hl-product-service-v2/.../ProductQueryService.java:243-267`