# 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 无改动。
