# 产品状态变更接口拆分

**日期**: 2026-04-15
**服务**: hl-product-service-v2
**影响**: 管理端产品管理

---

## 变更概要

原 `POST /admin/product/item/{id}/action` 接口拆分为2个独立接口，**前端不再需要传动作码**，后端自动判断。旧接口保留但已废弃。

---

## 新增接口

### 1. 上架/下架切换

```
POST /admin/product/item/{id}/toggle-publish
```

**请求体**（可选）:
```json
{
  "remark": "备注原因（可选）"
}
```

**后端自动逻辑**:
| 当前状态 | 普通用户 | 超管(SUPER_ADMIN) |
|----------|----------|-------------------|
| 草稿/已驳回/已下架 | 提交上架审批→待审核 | 直接上架→已上架 |
| 已上架 | 申请下架审批→待审核 | 强制下架→已下架 |
| 待审核 | 撤回→草稿 | 撤回→草稿 |

**审批流程**: 普通用户上架/下架会自动提交企微OA审批，审批通过后自动变更状态，无需前端处理。

**响应**:
```json
{
  "code": 200,
  "message": "操作成功",
  "data": null
}
```

### 2. 完成设计（仅定制产品）

```
POST /admin/product/item/{id}/complete
```

**请求体**（可选）:
```json
{
  "remark": "备注（可选）"
}
```

**限制**: 仅 `productType=CUSTOM` 的草稿产品可调用，其他类型返回500。

**响应**:
```json
{
  "code": 200,
  "message": "完成设计成功",
  "data": null
}
```

---

## 废弃接口

### ~~POST /admin/product/item/{id}/action~~

**状态**: @Deprecated，暂时保留兼容，后续版本移除。

请尽快迁移到上述2个新接口。

---

## 人群优惠bug修复

`GET /admin/product/item/{id}` 返回的 `crowdBenefit` 对象之前只有 `tips` 字段，现在完整返回所有字段：

```json
{
  "crowdBenefit": {
    "childTicket": "HALF_PRICE",
    "childAccommodation": "NO_BED",
    "childMeal": "HALF",
    "elderTicket": "FREE",
    "elderAccommodation": "SAME_AS_ADULT",
    "tips": "3岁以下免费"
  }
}
```

**前端无需改动**，之前缺失的字段现在正常返回。
