# refactor: 字典/配置/酒店/活动/景点/餐厅等管理端修改后小程序立即生效

> **服务**: hl-user-service + hl-resource-service + hl-mp-service
> **PR**: #894 + #896
> **Issue**: #892 + #893
> **日期**: 2026-04-19
> **前端是否需要改动**: **无需改动**（后端行为修复，原调用继续工作且立即可见新数据）

---

## 一、背景

继 PR #891 修好轮播图缓存问题后，排查发现项目内还有 6 个 Service 存在相同反模式。本次批量修复让以下对外接口都支持"管理端修改立即生效"：

- `/admin/dict/type/*`、`/admin/dict/data/*` → `/mp/dict/*`
- `/admin/frontend-config/*` → `/mp/config/*`
- `/admin/hotel/*` → `/mp/hotel/*`
- `/admin/activity/*` → `/mp/activity/*`
- `/admin/scenic/*` → `/mp/scenic/*`
- `/admin/restaurant/*` → `/mp/restaurant/*`

**前端可清理的历史 workaround**：
- 保存后刷新页面 / 二次请求 / 延迟拉取
- 本地"乐观更新"对应数据
- "请稍后刷新"类 toast 提示

---

## 二、变更接口清单

| # | 接口组 | 变更类型 | 前端改动 |
|---|-------|---------|---------|
| 1 | `/admin/dict/type/*` 、 `/admin/dict/data/*` CUD | 行为修复：保存立即生效 | 无需 |
| 2 | `/mp/dict/*` | 缓存 TTL 30min → 5min | 无需 |
| 3 | `/admin/frontend-config/*` CUD | 行为修复：保存立即生效 | 无需 |
| 4 | `/mp/config/*` | 缓存 TTL 30min → 5min | 无需 |
| 5 | `/admin/hotel/*`、`/admin/activity/*`、`/admin/scenic/*`、`/admin/restaurant/*` CUD 及批量操作 | 行为修复：保存立即生效；**原本批量操作漏清缓存的 bug 也修复** | 无需 |
| 6 | `/mp/hotel/*`、`/mp/activity/*`、`/mp/scenic/*`、`/mp/restaurant/*` | 无变化（TTL 已合理） | 无需 |

**请求/响应结构完全不变**。

---

## 三、修复说明

1. 抽公共工具 `CacheEvictAfterCommit`，把缓存清理统一推迟到事务提交后
2. 6 个 Service 所有写方法改用这个工具
3. Dict/Config 过长的读端 TTL 从 30 分钟降到 5 分钟（兜底）
4. 顺带修复 resource 4 个 Service 的 `batchUpdateStatus/batchDelete` 原本**根本没清缓存**的 bug

## 四、前端行动项

**无需任何代码改动**。可评估清理以下历史 workaround：

| 可移除的 workaround | 原因 |
|--------------------|------|
| 字典列表保存后手动刷新 | 缓存立即失效 |
| 配置改完调 `refresh()` 二次拉取 | 同上 |
| 酒店/活动/景点/餐厅列表保存后 setTimeout 重拉 | 同上 |
| "请稍后刷新"类 toast | 可改为"保存成功" |

## 五、测试环境已验证

改 banner title → MP `/mp/banner/active` 立即返回新值（同一 pattern，其他 Service 沿用）。
