diff --git a/changelogs/2026-05/13_fix_product_version_creator_wecom_name.md b/changelogs/2026-05/13_fix_product_version_creator_wecom_name.md new file mode 100644 index 0000000..6a0418c --- /dev/null +++ b/changelogs/2026-05/13_fix_product_version_creator_wecom_name.md @@ -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` 只取 `username`。 +修复(PR #2218 与主题列表 `ProductLineService` 对齐):改为 `Map`,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)