docs(changelog): 产品版本列表创建人显示企业微信中文名 (PR #2218, Issue #2217)

ProductQueryService.enrichCreatedByName 与主题列表 ProductLineService 对齐:
优先 wechatName, fallback username。前端契约不变, 无需改前端代码。

测试服 54 条记录全量回扫:
- 10 个 unique createdBy: 8 个解析为企微中文名 (lixiaosong→小松/wangxiao→王骁/jiangyulian→蒋雨莲/mimingguang→米明光/xulai→徐莱), 2 个 fallback username (admin/test_admin 未绑企微)
- 0 条 createdByName=null

@mmg

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
这个提交包含在:
API Changelog Bot 2026-05-13 17:44:54 +08:00
父节点 8a2fdb250c
当前提交 8ef595e115

查看文件

@ -0,0 +1,95 @@
---
date: 2026-05-13
type: backend-improvement
service: hl-product-service-v2
priority: low
notify: ["@mmg"]
status: verified
---
# 产品版本列表「创建人」显示企业微信中文名(与主题列表对齐)
> **PR**: [#2218](https://git.1814.love:8443/wx/HL/pulls/2218) — 已合并 dev + 部署测试服
> **Issue**: [#2217](https://git.1814.love:8443/wx/HL/issues/2217)
> **状态**: ✅ **测试服已验证** (api.test.1814.love:9443) — 真 admin token / 网关 / 54 条记录全量回扫通过
---
## 一、背景
`hl-ui` 管理端「产品列表」(即产品版本列表)「创建人」列原本展示**登录账号**`admin_user.username`,如 `lixiaosong` / `wangxiao`),与同模块「主题列表」(产品线列表)已经在用的**企业微信中文名**(如「小松」「王骁」)不一致,需要对齐。
根因(之前老接口逻辑):`ProductQueryService.enrichCreatedByName``Map<Long, String>` 只取 `username`
修复PR #2218 与主题列表 `ProductLineService` 对齐):改为 `Map<Long, AdminBasicDTO>`,set 时 `StrUtil.blankToDefault(dto.getWechatName(), dto.getUsername())`**优先用 wechatName企微中文名,没绑定企微时 fallback username**
仅 1 文件 +12/-3 行:`hl-product-service-v2/src/main/java/com/hulalv/service/admin/ProductQueryService.java`
---
## 二、变更接口清单
| # | 接口 | 方法 | 路径 | 变更类型 | 说明 |
|---|------|------|------|----------|------|
| 1 | 产品分页列表 | GET | `/admin/product/item/list` | 字段值优化 | `data.records[].createdByName` 由 username → wechatNamefallback username |
**前端契约 100% 不变**
- 字段名 `createdByName` 不变
- 字段类型 String 不变
- 字段位置在 `data.records[]` 不变
- 不为 null要么中文要么 username
**前端无需改任何代码** —— 字段值天然变好,渲染层零感知。
---
## 三、字段语义
| 字段 | 改前 | 改后 |
|------|------|------|
| `createdByName` | `admin_user.username`(如 `lixiaosong` | `admin_user.wechat_name`(如「小松」),无 wechatName 时 fallback `username` |
---
## 四、测试服验证(硬性凭证)
`GET /admin/product/item/list?page=1&pageSize=200`,Bearer admin token`admin` / `Admin@123456`),公网网关 `api.test.1814.love:9443`
- HTTP 200 / code=200 / total=54
- **0 条 createdByName=null**(铁律:要么中文要么 username
- **10 个不同 createdBy 中,8 个解析为企微中文名**,2 个 fallback usernameadmin、test_admin 这两个测试账号未绑定企微)
部分映射证据(按用户截图最关心的 lixiaosong 优先列出):
| createdBy | createdByName | 出处 |
|---|---|---|
| `2033349910786715649` (username=`lixiaosong`) | **`小松`** ✅(用户截图里 `D260511001` 同账号的版本) | wechatName 生效,与主题列表一致 |
| `2021059720172838914` (username=`wangxiao`) | **`王骁`** ✅ | wechatName 生效 |
| `2046065465288949761` (username=`jiangyulian`) | **`蒋雨莲`** ✅ | wechatName 生效 |
| `2027579942221352962` (username=`mimingguang`) | **`米明光`** ✅ | wechatName 生效 |
| `2033350005166944258` (username=`xulai`) | **`徐莱`** ✅ | wechatName 生效 |
| `1001` | `admin` | 无 wechatName,fallback username符合预期 |
| `1002` | `test_admin` | 无 wechatName,fallback username符合预期 |
lixiaosong 实测明细(用户截图里 lixiaosong 创建的版本现在显示什么):
```
productId=2052568716926681090 productNo=D260508001 name=燕 私人订制 createdByName=小松
productId=2049468625294708737 productNo=D260429001 name=私人订制 9天8晚... createdByName=小松
productId=2046109281911996418 productNo=C260420004 name=1111 出生地点... createdByName=小松
```
3/3 都已展示「小松」(企微中文名),改造前会全部展示 `lixiaosong`
---
## 五、部署
- 测试服 SSH rolling 部署完成hl-product-service-v2: 8083 + 8183 双实例 ~30s,零停机
- Nacos `test` namespace 两实例 healthy=true 已确认
---
## 六、风险与回滚
- 风险极低:仅展示字段值优化,无 schema 变更、无前端契约变化、无业务逻辑改动
- 回滚reverse PR #2218 即可1 文件 -12/+3