# product-v2: 紧急修复 — 保存版本不再改产品状态(退草稿只在还原时发生)

> **服务**: hl-product-service-v2 (端口 8083)
> **PR**: #2493
> **Issue**: #2491
> **关联 PR**: 修正 PR #2487 (本日上午合, 误把保存动作改成退草稿)
> **日期**: 2026-05-18
> **影响范围**: 产品快照保存逻辑 + mmg 前端弹窗文案

---

## ⚠️ mmg 必看:撤回 PR #2487 的弹窗警告文案

### 修正前 (PR #2487, 错的)
- 「保存版本」弹窗加警告: 「保存后产品将退回草稿状态, 已上架产品会下架」

### 修正后 (PR #2493, 用户铁规)
- 「保存版本」弹窗: **删掉上面那行警告**, 保存动作纯粹是备份, 不会改任何产品状态
- 「还原版本」弹窗: **保留**警告「还原后产品状态将变为草稿」(这才是真实行为)

---

## 业务规则最终态(用户两次纠偏后定稿)

| 动作 | 状态校验 | 保存/还原后产品状态 |
|------|----------|---------------------|
| **保存版本** (saveSnapshot) | 无 (任意状态可保存) | **保持原状态不变** (PUBLISHED→PUBLISHED, UNPUBLISHED→UNPUBLISHED) |
| **还原版本** (restoreSnapshot) | 非 PUBLISHED + 无活跃订单 + payload.productType 一致 | **强制 DRAFT** + 清空 publishedAt/approvalNo/pendingStatus |

---

## 服务端改动

仅 ProductSnapshotService.java + Test，2 文件 / +18 / -87 行：

- **saveSnapshot**: 删除 PR #2487 加的 `if (!DRAFT.equals(originalStatus)) helperService.updateProduct(patch)` 整段
- **restoreSnapshot**: 代码**完全不动**, 既有 `updateProduct.setStatus(DRAFT)` 行为是正确的, 这才是用户要的
- 强化 javadoc, 业务语义点明: 保存不改状态 / 还原必退草稿
- 清理废弃常量 `SAVE_ALLOWED_STATUSES_LEGACY` 和无用 import
- 单测断言 `verify(helperService, never()).updateProduct(any())` 反证保存动作不调 update

---

## 接口契约不变

- URL / Method / 入参 / 出参 全部不变
- 仅是**行为修复**: 之前 PR #2487 让保存动作有了"自动退草稿"副作用, 这个副作用现在去掉了

---

## e2e 验收 (2026-05-18 测试服)

- ✅ PUBLISHED 产品 (2049754271968047106) 保存 snapshotId=2056223052173131778, 前后 status=PUBLISHED
- ✅ UNPUBLISHED 产品 (2046069754753335297) 保存 snapshotId=2056223131302871042, 前后 status=UNPUBLISHED
- ✅ 单测全绿 (1295 product-v2 单测)

---

## 部署

- 测试服: Deploy Panel task `b9e613ba` (2026-05-18 11:53, 已部署)
- 正式服: 待 Deploy Panel /prod 触发
- nacos: 无需配置变化
