# product-v2: 快照列表「创建人」回填 + 还原弹窗文案中文化(mmg 必看)

> **服务**: hl-product-service-v2 (端口 8083)
> **PR**: #2529
> **Issue**: #2528
> **日期**: 2026-05-18
> **影响范围**: 版本管理列表展示 + 还原版本弹窗文案

---

## ⚠️ mmg 必看 - 两件事

### 1. 后端 RespVO 加了 `createdByName` 字段 — 列表展示绑这个

接口 URL / Method 不变,出参新增字段:

```json
GET /admin/product/item/{id}/snapshots?pageNum=1&pageSize=10
{
  "code": 200,
  "data": {
    "records": [
      {
        "id": "...",
        "name": "v1-行程定稿",
        "description": "...",
        "fileSize": 67890,
        "keepForever": false,
        "createdBy": 1001,
        "createdByName": "张三",   ← 🆕 新增字段,前端「创建人」列绑这个
        "createTime": "2026-05-18 14:30:00"
      }
    ]
  }
}
```

**展示规则**:
- 历史 5 条 created_by=NULL 的快照, createdByName 也是 null → 前端展示「—」(已知,接受)
- 新保存的快照, createdByName 优先企微昵称, fallback username

### 2. 「创建时间」列前端字段绑错请改

如果前端模板绑的是 `createdAt`, 改成 `createTime` (后端返的字段名是 `createTime`, 历史也一直是这个)。

### 3. 还原版本弹窗文案中文化(用户截图反馈)

旧文案(英文/技术词,用户看不懂):

```
还原后:
- 产品所有字段(含价格、行程、备品等)会回到该版本
- 产品状态会强制设回「草稿」, 原 publishedAt / approvalNo 会被清空
- 已有订单(活跃报名)或处于「已上架」状态的产品无法还原
- 操作日志会记录一条还原(RESTORE)
```

新文案建议:

```
还原后:
- 产品所有字段(含价格、行程、备品等)会回到该版本
- 产品状态会强制设回「草稿」, 上架时间和审批编号会被清空
- 已有订单(活跃报名)或处于「已上架」状态的产品无法还原
- 操作日志会记录一条「还原版本」
```

去掉 `publishedAt` / `approvalNo` / `RESTORE` 三个英文字段名/枚举值,改用中文业务术语。

---

## 服务端改动

- saveSnapshot 显式 setCreatedBy(AdminContextUtil.getAdminId()) 兜底 OperatorHolderFilter 未生效场景
- ProductSnapshotRespVO 加 createdByName String 字段
- ProductSnapshotService 加 enrichCreatedByName: 批量调 UserFeignClient.batchGetAdminInfo 回填, 与 ProductQueryService 同方案
- 注入 UserFeignClient (@Nullable, 单测兼容)
- ProductSnapshotServiceTest 21/21 全绿

---

## 部署

- 测试服: 等待 PR #2529 后续部署
- 正式服: 等下一次 release 合 main 后部署
- nacos / DB: 无变化
