# 退款政策 + 产品多退款政策绑定

**日期**: 2026-03-19
**类型**: 功能增强
**影响模块**: 退款管理 → 退款政策、产品管理 → 产品设计

---

## 一、退款政策新增 refund_type 字段

### 变更说明

退款政策表新增 `refund_type` 字段，区分定金/尾款/全款退款政策。同类型只能有一个默认政策。

### 数据库变更

```sql
ALTER TABLE refund_policy ADD COLUMN refund_type VARCHAR(20) DEFAULT NULL
  COMMENT '退款类型（字典：refund_type）DEPOSIT/BALANCE/FULL' AFTER policy_name;
```

### 接口影响

#### 创建退款政策 `POST /order/refund-policy`
#### 更新退款政策 `PUT /order/refund-policy/{policyId}`

请求参数新增：

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| refundType | String | 否 | 退款类型（字典：refund_type） |

#### 查询退款政策（列表/详情）

响应新增字段：

| 字段 | 类型 | 说明 |
|------|------|------|
| refundType | String | 退款类型（字典：refund_type） |

### 关联字典：refund_type

| dict_value | dict_label | 说明 |
|-----------|-----------|------|
| DEPOSIT | 定金 | 定金退款政策 |
| BALANCE | 尾款 | 尾款退款政策 |
| FULL | 全款 | 全款退款政策 |

### 业务规则

- 退款政策必须指定退款类型
- 同一退款类型下，**只能有一个默认政策**
- 不同退款类型可以各有自己的默认政策

---

## 二、产品支持多退款政策绑定

### 变更说明

产品现在支持按退款类型绑定不同的退款政策。例如：
- 全款支付方式 → 绑定一个 FULL 类型的退款政策
- 定金+尾款支付方式 → 分别绑定 DEPOSIT 和 BALANCE 类型的退款政策

### 数据库变更

```sql
ALTER TABLE product ADD COLUMN refund_policy_ids TEXT DEFAULT NULL
  COMMENT '退款政策映射JSON' AFTER refund_policy_id;
```

### 接口影响

#### 创建/更新/保存产品

请求参数新增：

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| refundPolicyIds | Map<String, String> | 否 | 退款政策映射，key=退款类型，value=政策ID |

请求示例：
```json
{
  "refundPolicyIds": {
    "FULL": "1893012345678901234",
    "DEPOSIT": "1893012345678901235",
    "BALANCE": "1893012345678901236"
  }
}
```

#### 查询产品详情

响应新增字段：

| 字段 | 类型 | 说明 |
|------|------|------|
| refundPolicyIds | Map<String, String> | 退款政策映射，key=退款类型，value=政策ID |

响应示例：
```json
{
  "refundPolicyIds": {
    "FULL": "1893012345678901234",
    "DEPOSIT": "1893012345678901235"
  }
}
```

> 旧字段 `refundPolicyId`（单个ID）保留兼容，但建议迁移到 `refundPolicyIds`。

### 前端实现建议

```
┌─────────────────────────────────────────┐
│  退款政策配置                             │
├─────────────────────────────────────────┤
│                                         │
│  全款退款政策:  [下拉选择: FULL类型政策]    │
│                                         │
│  ── 以下仅"定金+尾款"支付方式显示 ──       │
│                                         │
│  定金退款政策:  [下拉选择: DEPOSIT类型政策] │
│                                         │
│  尾款退款政策:  [下拉选择: BALANCE类型政策] │
│                                         │
└─────────────────────────────────────────┘
```

- 根据产品的**支付方式**决定显示哪些退款政策选择器
- 全款支付 → 只显示 FULL 类型的退款政策下拉
- 定金+尾款 → 显示 DEPOSIT 和 BALANCE 两个退款政策下拉
- 退款政策下拉列表调用 `GET /order/refund-policy/list`，按 `refundType` 字段过滤
- 保存时将选中的政策ID组装成 `refundPolicyIds` Map 传给后端

### 退款政策列表页

- 编辑弹窗中的"退款类型"下拉从字典 `refund_type` 加载
- 列表中"退款类型"列显示字典翻译值（DEPOSIT→定金，BALANCE→尾款，FULL→全款）

---

## 三、已有数据处理

已自动迁移旧数据：
- 政策名含"定金" → refund_type = DEPOSIT
- 政策名含"尾款" → refund_type = BALANCE
- 政策名含"全款" → refund_type = FULL
- 其余 → refund_type = FULL
