fix: PR #2493 saveSnapshot 不改产品状态 + 修正 PR #2487 changelog

- 新增 18_fix_product_v2_snapshot_save_no_status_change.md (PR #2493)
- 修正 18_feat_product_v2_snapshot_p23_loosen_save_group_batch.md
  Section 2 关于"PR #2487 保存退草稿"的描述, 改为指向 PR #2493 最终态
- mmg 弹窗文案: 「保存版本」弹窗删警告; 「还原版本」弹窗保留
这个提交包含在:
API Changelog Bot 2026-05-18 12:02:21 +08:00
父节点 c7577b951d
当前提交 66c02b1c6c
共有 2 个文件被更改,包括 73 次插入8 次删除

查看文件

@ -20,15 +20,17 @@
- **真实业务收益**:解锁了「定制师本人 + 该产品所属公司其他 CUSTOMIZER 同事」的多角色保存场景(之前只 SUPER_ADMIN 或单一 owner。彻底"所有 admin 都能保存任意产品"**没达成**@DataScope 拦着,符合业务安全考虑——CUSTOMIZER 不该备份别人的产品)
- 还原/删除/标记永久**仍保留 Service 层 checkPriceEditPermission 严格校验**
### 2. 状态校验彻底取消(**PR #2487 进一步放开**
### 2. 状态校验彻底取消(PR #2487 → PR #2493 修正最终态
- ~~P2.3 初版:`DRAFT / UNPUBLISHED / COMPLETED` 三种~~
- **最终PR #2487****任意状态都可保存**PUBLISHED / 审批中也行)
- ⚠️ **但保存动作 = 备份 + 退草稿组合**
- 保存成功后产品状态会**自动退回 `DRAFT`**(原状态写到操作日志 detail
- 已经是 DRAFT 的产品不变
- **PUBLISHED 产品点保存 → 立即下架**mp 端看不到)
- **审批中产品点保存 → 撤销审批**
- mmg **必须**在弹窗加警告文案:「保存后产品将退回草稿状态,已上架产品会下架」
- ~~PR #2487 (错的, 已被 #2493 推翻):保存 = 备份 + 强制退草稿组合~~
- **最终态PR #2493****任意状态都可保存, 且保存动作绝不改产品状态**
- PUBLISHED 产品保存 → 仍 PUBLISHED, mp 端**不下架**
- UNPUBLISHED / 审批中产品保存 → 状态**保持不变**
- DRAFT 产品保存 → 仍 DRAFT
- ⚠️ **退草稿只发生在「还原版本」(restoreSnapshot)**, 不在「保存版本」(saveSnapshot)
- mmg 弹窗文案修正:
- 「保存版本」弹窗: **去掉**"保存后产品将退回草稿状态"的警告 (PR #2487 时让 mmg 加, 现在错的要去掉)
- 「还原版本」弹窗: **保留**"还原后产品状态将变为草稿"警告 (这是真实行为)
### 3. GROUP 小蒙马班期完整保存(修复缺陷)
- **旧版 P2.2 漏存** `group_tour_batch` 表 → GROUP 还原后班期数据丢失

查看文件

@ -0,0 +1,63 @@
# 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: 无需配置变化