---
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 → wechatName（fallback 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 username（admin、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）
