diff --git a/changelogs/2026-05/25_refactor_review_source_label_via_dict.md b/changelogs/2026-05/25_refactor_review_source_label_via_dict.md new file mode 100644 index 0000000..e0e7a6e --- /dev/null +++ b/changelogs/2026-05/25_refactor_review_source_label_via_dict.md @@ -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 无改动。