# 2026-03-27 产品状态重构 + 上下架审批 + 价格日历修复

## 一、重大变更：产品状态和审核状态分离（PR #23）

### 产品状态 `status`（简化为3种）

| 值 | 说明 |
|---|------|
| DRAFT | 草稿 |
| PUBLISHED | 上架 |
| UNPUBLISHED | 下架 |

**废弃的旧状态**：PENDING_REVIEW、REVIEWED、REJECTED 不再使用

### 新增字段 `approvalStatus`（审核状态）

字典：`product_approval_status`

| 值 | 说明 |
|---|------|
| NONE | 无审核 |
| PENDING | 审核中 |
| PUBLISH_APPROVED | 上架通过 |
| PUBLISH_REJECTED | 上架驳回 |
| UNPUBLISH_APPROVED | 下架通过 |
| UNPUBLISH_REJECTED | 下架驳回 |

### 前端状态变更接口

`PUT /admin/product/{id}/status`，`targetStatus` 含义：
- `PUBLISHED` → 提交上架审批（企微OA）
- `UNPUBLISHED` → 提交下架审批（企微OA）
- `DRAFT` → 直接改为草稿

### 列表和详情都返回 `approvalStatus`

前端根据 `status` + `approvalStatus` 两个字段显示状态。

---

## 二、价格日历修复汇总

| PR | 修复 |
|----|------|
| #14 | 价格为0不能设为可售 |
| #15 | 库存为0不能设为可售 |
| #16 | 自动计算为0时提示具体缺价格的资源 |
| #17 | GROUP产品无团期也能设价格日历 |
| #18 | resource_type大小写不匹配导致景区活动成本为0 |
| #19 | 餐厅不参与成本计算，跳过RESTAURANT节点 |
| #20 | GROUP无团期时自动计算能正确算出售价 |

## 三、团期人员严格校验（PR #21）

团期设置服务人员必须严格按产品配置：
- 类型必须匹配
- 数量必须匹配
- 人员必须在备选池内

## 部署说明

重启：**hl-product-service**
