fix(changelog): 修正 productTypeName 数据字典 label(ROUTE/CUSTOM/GROUP)

原 changelog 初稿使用了错误 label(线路产品/定制产品/团队产品),
实际 label 以数据字典 product_type 为准:
- ROUTE:自驾路书
- CUSTOM:私人定制
- GROUP:小蒙马
同时补充说明 productTypeName 来源是 sys_dict product_type,
以及修正 PR #4022(Issue #4021)关联链接。
这个提交包含在:
yaosutu 2026-06-19 09:45:03 +08:00
父节点 20032ec600
当前提交 9f1b885bfa

查看文件

@ -12,7 +12,7 @@
## ① 接口背景 ## ① 接口背景
订单创建时,产品类型(核心/线路/定制/团队)会从产品快照固化到订单主表。此前该字段从未通过接口返回,前端无法在订单列表和详情中区分产品类型。本次在两个接口的出参中同时补充 `productType`(枚举码)和 `productTypeName`(中文名),方便前端按产品类型展示差异化 UI。 订单创建时,产品类型(核心产品/自驾路书/私人定制/小蒙马)会从产品快照固化到订单主表。此前该字段从未通过接口返回,前端无法在订单列表和详情中区分产品类型。本次在两个接口的出参中同时补充 `productType`(枚举码)和 `productTypeName`数据字典中文名),方便前端按产品类型展示差异化 UI。
历史订单已完成回填,无快照的兜底为 `CORE`;理论上正常订单都有值,极少数脏数据可能为 `null`,前端需做防御处理。 历史订单已完成回填,无快照的兜底为 `CORE`;理论上正常订单都有值,极少数脏数据可能为 `null`,前端需做防御处理。
@ -78,7 +78,7 @@
| 字段名 | 类型 | 可空 | 说明 | | 字段名 | 类型 | 可空 | 说明 |
|--------|------|------|------| |--------|------|------|------|
| `productType` | String | 是null 为极少数历史脏数据) | 产品类型枚举码,见枚举 § ⑥ | | `productType` | String | 是null 为极少数历史脏数据) | 产品类型枚举码,见枚举 § ⑥ |
| `productTypeName` | String | 是(与 productType 同步,null when productType null | 产品类型中文名,`核心产品` | | `productTypeName` | String | 是(与 productType 同步,null when productType null | 产品类型中文名,来源数据字典 product_type,如 `私人定制` |
### 5.2 订单详情data.main 节点,新增字段) ### 5.2 订单详情data.main 节点,新增字段)
@ -87,20 +87,22 @@
| 字段名 | 类型 | 可空 | 说明 | | 字段名 | 类型 | 可空 | 说明 |
|--------|------|------|------| |--------|------|------|------|
| `productType` | String | 是null 为极少数历史脏数据) | 产品类型枚举码,见枚举 § ⑥ | | `productType` | String | 是null 为极少数历史脏数据) | 产品类型枚举码,见枚举 § ⑥ |
| `productTypeName` | String | 是(与 productType 同步,null when productType null | 产品类型中文名,如 `定制产品` | | `productTypeName` | String | 是(与 productType 同步,null when productType null | 产品类型中文名,来源数据字典 product_type,`私人定制` |
--- ---
## ⑥ 枚举 / 数据字典 ## ⑥ 枚举 / 数据字典
### ProductType — 产品类型 ### ProductType — 产品类型(数据字典 product_type
> `productTypeName` 来源是**数据字典 `product_type`**(由运维在 `sys_dict` 中维护),**不是后端硬编码枚举**。后端在列表/详情整页加载时统一查字典回填,前端直接使用 `productTypeName` 展示,无需自行映射。
| 枚举值productType | 中文名productTypeName | 说明 | | 枚举值productType | 中文名productTypeName | 说明 |
|-----------------------|--------------------------|------| |-----------------------|--------------------------|------|
| `CORE` | 核心产品 | 核心旅游产品;历史无快照订单兜底此值 | | `CORE` | 核心产品 | 核心旅游产品;历史无快照订单兜底此值 |
| `ROUTE` | 线路产品 | 固定线路产品 | | `ROUTE` | 自驾路书 | 自驾路书产品 |
| `CUSTOM` | 定制产品 | 定制行程产品 | | `CUSTOM` | 私人定制 | 私人定制行程产品 |
| `GROUP` | 团队产品 | 团期/团队产品 | | `GROUP` | 小蒙马 | 团期/团队产品 |
> `productType` 字段值固定为以上 4 个枚举码之一,或为 `null`(极少数历史脏数据,正常订单不会出现)。 > `productType` 字段值固定为以上 4 个枚举码之一,或为 `null`(极少数历史脏数据,正常订单不会出现)。
@ -141,7 +143,7 @@ Authorization: Bearer <token>
"status": "PENDING_PAYMENT", "status": "PENDING_PAYMENT",
"productName": "丽江深度定制5日", "productName": "丽江深度定制5日",
"productType": "CUSTOM", "productType": "CUSTOM",
"productTypeName": "定制产品", "productTypeName": "私人定制",
"totalAmount": "12800.00", "totalAmount": "12800.00",
"createTime": "2026-06-19T10:00:00" "createTime": "2026-06-19T10:00:00"
} }
@ -171,7 +173,7 @@ Authorization: Bearer <token>
"orderNo": "HL202606190001", "orderNo": "HL202606190001",
"status": "PENDING_PAYMENT", "status": "PENDING_PAYMENT",
"productType": "CUSTOM", "productType": "CUSTOM",
"productTypeName": "定制产品", "productTypeName": "私人定制",
"totalAmount": "12800.00" "totalAmount": "12800.00"
}, },
"travelers": [], "travelers": [],
@ -224,7 +226,7 @@ Authorization: Bearer <token>
**适用** **适用**
- 所有状态的订单(已完成、取消、退款中等)均会返回 `productType` 字段 - 所有状态的订单(已完成、取消、退款中等)均会返回 `productType` 字段
- `GROUP` 类型订单为团期产品,前端可据此渲染团期专属 UI如团期编号、报名人数等 - `GROUP` 类型订单为团期产品(中文名:小蒙马),前端可据此渲染团期专属 UI如团期编号、报名人数等
**不适用** **不适用**
- 此字段不影响订单的任何操作权限,不参与状态流转判断 - 此字段不影响订单的任何操作权限,不参与状态流转判断
@ -242,7 +244,7 @@ Authorization: Bearer <token>
| 字段 | 修改前 | 修改后 | | 字段 | 修改前 | 修改后 |
|------|--------|--------| |------|--------|--------|
| `productType` | 不返回(字段不存在) | 返回枚举字符串,如 `"CUSTOM"` | | `productType` | 不返回(字段不存在) | 返回枚举字符串,如 `"CUSTOM"` |
| `productTypeName` | 不返回(字段不存在) | 返回中文名,如 `"定制产品"` | | `productTypeName` | 不返回(字段不存在) | 返回数据字典中文名,如 `"私人定制"` |
**影响接口** **影响接口**
- `GET /v3/admin/order/list` → 列表每条 item 新增两字段 - `GET /v3/admin/order/list` → 列表每条 item 新增两字段
@ -267,8 +269,9 @@ Authorization: Bearer <token>
## ⑫ 注意事项 ## ⑫ 注意事项
1. **防御 null**`productType``productTypeName` 理论上有值,但请在渲染时做 null 判断,避免历史脏数据导致前端报错 1. **防御 null**`productType``productTypeName` 理论上有值,但请在渲染时做 null 判断,避免历史脏数据导致前端报错
2. **两字段配套**`productType` 为枚举码(用于逻辑判断),`productTypeName` 为中文名(用于展示),两者同步出现或同步为 null,无需前端自己做枚举映射 2. **两字段配套**`productType` 为枚举码(用于逻辑判断),`productTypeName`数据字典中文名(用于展示),两者同步出现或同步为 null,前端无需自行映射枚举
3. **不可变字段**`productType` 在订单层面不可变,前端无需考虑实时刷新或监听变化 3. **不可变字段**`productType` 在订单层面不可变,前端无需考虑实时刷新或监听变化
4. **label 修正说明**:本文件于 2026-06-19 修正了 ROUTE/CUSTOM/GROUP 的中文名(见 PR #4022),原 changelog 初稿使用了后端枚举注释值,实际 label 以数据字典 product_type 为准
--- ---
@ -278,4 +281,6 @@ Authorization: Bearer <token>
- **PR**: [#4010 feat(order-v3): order_main 加 product_type 列 + 列表/详情返回 productType](https://git.1814.love:8443/wx/HL/pulls/4010) - **PR**: [#4010 feat(order-v3): order_main 加 product_type 列 + 列表/详情返回 productType](https://git.1814.love:8443/wx/HL/pulls/4010)
- **Feature Commit**: [849e3be9a](https://git.1814.love:8443/wx/HL/commit/849e3be9a) - **Feature Commit**: [849e3be9a](https://git.1814.love:8443/wx/HL/commit/849e3be9a)
- **Merge Commit**: [36880d1e2](https://git.1814.love:8443/wx/HL/commit/36880d1e2) - **Merge Commit**: [36880d1e2](https://git.1814.love:8443/wx/HL/commit/36880d1e2)
- **Label 修正 Issue**: [#4021 productTypeName 改走数据字典 product_type](https://git.1814.love:8443/wx/HL/issues/4021)
- **Label 修正 PR**: [#4022](https://git.1814.love:8443/wx/HL/pulls/4022)
- **后端负责人**: 腰苏图 - **后端负责人**: 腰苏图