refactor(评价): sourceLabel 彻底字典化 (HL #2990/PR #2991)

- 删 ReviewSourceEnum.labelOf, sourceLabel 改走 DictFeignClient 查 review_source 字典
- 运维改 sys_dict_data.dict_label 接口立即反映(配套 admin 字典编辑接口清 Redis 缓存)
- 接口契约不变,前端无需改动
- 范围限定 review_source(项目 review_status/review_level 等仍走 ReviewConstants 静态 Map)
这个提交包含在:
API Changelog Bot 2026-05-25 13:33:51 +08:00
父节点 9c33bc4dc2
当前提交 b363d6d8d1

查看文件

@ -0,0 +1,85 @@
# refactor(评价): sourceLabel 彻底字典化(运维改字典 dict_label 接口立即反映)
> **类型**: refactor(后端纯重构,接口契约不变,前端无需改动)
> **关联 PR/Issue**: PR #2991 (Closes #2990) — 承接 #2988 字典加数据 + #2989 enum 双写
> **日期**: 2026-05-25
> **影响范围**: admin / mp 所有返 `sourceLabel` 字段的评价接口
> **接收方**: mmg(知会即可)
> **前端**: **无需改动**
---
## 🎯 背景
#2988 在 sys_dict_data 加了 review_source 字典数据;#2989 后端 sourceLabel 仍由 `ReviewSourceEnum.labelOf()` 硬编码算出 — 字典数据"白加",改字典 dict_label 接口不变。
本次彻底字典化:删 enum 的 label 字段,sourceLabel 通过 `DictFeignClient.getDictDataByType("review_source")` 查字典动态获取。
---
## ✅ 接口契约不变
| 接口 | sourceLabel 取值 | 是否变化 |
|------|------------------|---------|
| `GET /admin/review/list` | 小程序 / 有赞 | 不变 |
| `GET /mp/review/target` | 小程序 / 有赞 | 不变 |
| `GET /mp/review/product/{id}` | 小程序 / 有赞 | 不变 |
| `GET /mp/product/{id}` reviewSummary.topReview | 小程序 / 有赞 | 不变 |
**前端无需任何改动**。
---
## 🔧 运维能力增强(本次重构的真正价值)
如果想把「小程序」改成「微信小程序」,运维在 admin 字典管理改字典 dict_label 即可,**所有接口立即反映**,无需后端重启或发版。
操作路径:admin 后台 → 系统管理 → 字典管理 → 找到 `review_source` 类型 → 编辑 dict_value=MINIPROGRAM 的 dict_label → 保存。
底层机制:admin 字典编辑接口会自动清 Redis 缓存 `cache:dict:data:review_source`,下次接口请求重新加载字典,sourceLabel 立即更新。
---
## ⚠️ 范围限定(项目惯例双标)
本次只改 review_source。其他 label 字段(`reviewType` / `productType` 等已走字典,`statusLabel` / `levelLabel` / `targetTypeLabel` 等仍走 ReviewConstants 静态 Map 硬编码)**不动**。
如果要统一,需要另开工单批量改造(范围爆炸 5x + 性能/兼容性需重新评估)。
---
## ✅ 后端验证
### 本地(gateway 8080)
```
[默认] GET /admin/review/list?source=MINIPROGRAM → sourceLabel=小程序
[UPDATE 字典 + 清 cache:dict:data:review_source]
[改字典后] 同接口 → sourceLabel=微信小程序 ✓
[恢复 + 清缓存]
[恢复后] 同接口 → sourceLabel=小程序 ✓
```
### 测试服(api.test.1814.love:9443)
```
[默认] GET /admin/review/list?source=MINIPROGRAM → sourceLabel=小程序
[改字典 + 清测试服 Redis cache:dict:data:review_source]
[改字典后] 同接口 → sourceLabel=微信小程序 ✓ 动态生效
[恢复 + 清缓存]
[恢复后] 同接口 → sourceLabel=小程序 ✓
```
rolling-deploy hl-order-service-v2 1.5 分钟,双实例 UP。
---
## 🗃️ 文件改动
| 文件 | 改动 |
|------|------|
| `ReviewSourceEnum.java`(order-v2) | 删 label/code 字段、labelOf/fromCode 方法,enum 简化为裸值 |
| `ReviewDetailAssembler.java`(order-v2) | assembleMpList 加 loadDictLabels("review_source"),透传到 toMpReviewVO |
| `ReviewQueryService.java`(order-v2) | listReviews 同模式,toReviewListVO 加 sourceLabels 参数 |
DTO/VO/Feign 链路自动透传,product-v2 / mp-service 无改动。