feat: 2026-05-30 二期管理后台 3 份 changelog
PR #3273 (Issue #3272): 资源退费说明 CRUD 模块 - hl-resource-service 新建表 resource_refund_note + 3 admin 接口 - 给运营在景区/活动详情下维护退费说明 - 后续 PR 接入产品快照 + PDF + 核单 Step 5 PR #3284 (Issue #3283): orderStatus/flowStatus 补 label 中文映射 - 订单列表/详情/创单响应新增 orderStatusName + flowStatusName - 非破坏性,前端可选改造删掉自己的映射表 PR #3286 (Issue #3285): 订单接口加 8 步步骤条字段 + 修 2 个文案 - 新增 flowStep/flowStepTotal/flowDisplayText (16→8 步映射 + 中文文案) - 修订 2 个枚举 label: 待提交房型→待提交配房需求, 待提交用车→待配车需求 - 前端请确认有无按老文案做字符串硬比较 3 PR 已全部 squash 合并到 dev-v3, 等部署后生效。
这个提交包含在:
父节点
0ef33be11d
当前提交
884f52e2e1
@ -0,0 +1,238 @@
|
||||
# 二期 v3:资源退费说明 CRUD 模块(给司机行程单展示用)
|
||||
|
||||
> **服务**: hl-resource-service
|
||||
> **PR**: #3273
|
||||
> **Issue**: #3272
|
||||
> **日期**: 2026-05-30
|
||||
> **影响**: 🟢 新增能力。给运营在景区/活动详情下"维护退费说明"提供 CRUD 接口;最终用于行程单 PDF 渲染 + 核单 Step 5 录入对账。本期**仅交付资源服务端**,后续 PR 接入产品快照 + PDF + 核单。
|
||||
|
||||
---
|
||||
|
||||
## 总览(前端 mmg 必读)
|
||||
|
||||
每个景区(SCENIC)和活动(ACTIVITY)资源都可以挂一份"退费说明",包含资源级备注 + 多条退费明细(标题/金额/单位/备注/生效期)。
|
||||
|
||||
**界面**:景区 / 活动列表行加一个按钮 → 弹窗里调本期 3 个接口做 CRUD。
|
||||
|
||||
**接口前缀**:`/admin/refund-note`(**无 `/v3/` 前缀**,因 resource-service 沿用一期路径风格;消费方仍是二期 v3 管理后台)。
|
||||
|
||||
**本期不做**:行程单 PDF 渲染、产品 ProductDetailVO 注入 refundNote、订单 OrderProductSnapshotContent 反序列化、核单 Step 5 录入对接。这些留后续 PR。
|
||||
|
||||
---
|
||||
|
||||
## 接口清单(3 个)
|
||||
|
||||
### 1. 查询单资源的退费说明
|
||||
|
||||
```
|
||||
GET /admin/refund-note?resourceType=SCENIC&resourceId=12345
|
||||
```
|
||||
|
||||
**入参**(query)
|
||||
|
||||
| 字段 | 类型 | 必填 | 枚举 | 说明 |
|
||||
|---|---|---|---|---|
|
||||
| `resourceType` | string | ✅ | `SCENIC` / `ACTIVITY` | 资源类型 |
|
||||
| `resourceId` | long | ✅ | - | 资源 ID(字符串透传雪花)|
|
||||
|
||||
**返回**
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"code": 200,
|
||||
"data": { // 未配置时直接返 null,前端按 null 隐藏弹窗内容
|
||||
"noteId": "20596378108368322580", // 雪花 ID 字符串透传
|
||||
"resourceType": "SCENIC",
|
||||
"resourceId": "12345",
|
||||
"intro": "苔藓为赠送项目,不退费",
|
||||
"items": [
|
||||
{
|
||||
"title": "成人未参加",
|
||||
"amount": 44.00,
|
||||
"unitLabel": "/人", // 展示文案,给人看
|
||||
"settleScope": "PER_PERSON", // 结算粒度枚举,给规则引擎用
|
||||
"remark": "",
|
||||
"effectiveFrom": null, // yyyy-MM-dd
|
||||
"effectiveTo": null
|
||||
},
|
||||
...
|
||||
],
|
||||
"createTime": "2026-05-30 10:15:00",
|
||||
"updateTime": "2026-05-30 10:15:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**枚举**
|
||||
|
||||
- `settleScope`:
|
||||
- `PER_PERSON` 按人结算(默认)
|
||||
- `PER_TEAM` 按团结算(如寻龙诀 100/团 整团一次性)
|
||||
- `PER_VEHICLE` 按车辆结算(如卡丁车 2 人/辆,按辆数乘单价)
|
||||
|
||||
**注意**:`unitLabel`("/人" / "/团" / "/辆")和 `settleScope` **职责不同**:
|
||||
- 卡丁车场景:`unitLabel="/人"`(给客户看是 120/人)+ `settleScope=PER_VEHICLE`(引擎按车辆数乘单价)
|
||||
- 两个字段独立维护,前端展示用 `unitLabel`,未来规则引擎用 `settleScope`。
|
||||
|
||||
### 2. 保存(upsert 整块)
|
||||
|
||||
```
|
||||
PUT /admin/refund-note
|
||||
```
|
||||
|
||||
**入参**(body)
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"resourceType": "SCENIC",
|
||||
"resourceId": 12345,
|
||||
"intro": "苔藓为赠送项目,不退费",
|
||||
"items": [
|
||||
{
|
||||
"title": "成人未参加", // 必填
|
||||
"amount": 44.00, // 必填,>= 0(赠送项填 0)
|
||||
"unitLabel": "/人", // 默认 "/人",可省略
|
||||
"settleScope": "PER_PERSON", // 默认 "PER_PERSON",可省略
|
||||
"remark": "",
|
||||
"effectiveFrom": null,
|
||||
"effectiveTo": null
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**约束**
|
||||
|
||||
- `resourceType`:必须是 `SCENIC` / `ACTIVITY`
|
||||
- `resourceId`:**必须在 scenic_spot / activity 表存在且未软删**,否则返 390805 "关联资源不存在"
|
||||
- `items`:至少 1 条,最多 50 条
|
||||
- `items[].amount`:>= 0(赠送项目填 0)
|
||||
- `items[].settleScope`:必须是上述 3 枚举之一(null 时默认 PER_PERSON)
|
||||
- `items[].effectiveFrom` <= `items[].effectiveTo`(同时存在时)
|
||||
|
||||
**返回**
|
||||
|
||||
```jsonc
|
||||
{ "code": 200, "data": "20596378108368322580" } // 落库后的 noteId(字符串透传)
|
||||
```
|
||||
|
||||
**语义**:upsert——按 (resourceType, resourceId) 找现有记录,有则**整块覆盖**(不做 item 级 diff),无则 insert。
|
||||
|
||||
### 3. 软删整份
|
||||
|
||||
```
|
||||
DELETE /admin/refund-note?resourceType=SCENIC&resourceId=12345
|
||||
```
|
||||
|
||||
**入参**:同 GET。
|
||||
**返回**:`{ "code": 200, "data": true }`(不存在或已软删返 false,不报错)。
|
||||
|
||||
软删用主键自身写 deleted_at,UNIQUE KEY 永不撞键,支持同资源无限次"删→重建"。
|
||||
|
||||
---
|
||||
|
||||
## 错误码(段位 39080x)
|
||||
|
||||
| code | 错误信息 |
|
||||
|---|---|
|
||||
| 390801 | 退费明细金额必须 ≥ 0 |
|
||||
| 390802 | 退费明细生效起日不能晚于止日 |
|
||||
| 390803 | 退费明细结算粒度非法: {0} |
|
||||
| 390804 | 退费说明资源类型非法: {0} |
|
||||
| 390805 | 关联资源不存在: type={0}, id={1} |
|
||||
|
||||
非业务错误(参数校验失败)走通用 400。
|
||||
|
||||
---
|
||||
|
||||
## 业务边界
|
||||
|
||||
- **资源类型**:一期仅 `SCENIC` + `ACTIVITY`,其他资源(餐饮/酒店/物资等)有各自退订/退款政策,不复用本结构。
|
||||
- **一份生效**:同资源同时刻只有一份生效的退费说明(DB 唯一键 `(resource_type, resource_id, deleted_at)` 保证)。
|
||||
- **关联校验**:保存时校验 resourceId 在主资源表存在,防孤儿数据。
|
||||
- **资源软删后**:本退费说明仍存在但孤儿(查不到对应资源),不主动清理;运营侧需手动删除。
|
||||
|
||||
---
|
||||
|
||||
## 数据示例(典型)
|
||||
|
||||
### 白桦林(4 条规则)
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"resourceType": "SCENIC", "resourceId": 12345,
|
||||
"intro": "苔藓为赠送项目, 不退费",
|
||||
"items": [
|
||||
{"title": "儿童/学生/无证件未参加", "amount": 15, "unitLabel": "/人", "settleScope": "PER_PERSON"},
|
||||
{"title": "免票座电瓶车", "amount": 30, "unitLabel": "/人", "settleScope": "PER_PERSON"},
|
||||
{"title": "白桦林未参加", "amount": 44, "unitLabel": "/人", "settleScope": "PER_PERSON"},
|
||||
{"title": "桦树皮画未参加", "amount": 50, "unitLabel": "/人", "settleScope": "PER_PERSON", "remark": "仅儿童"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 寻龙诀(按团结算)
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"resourceType": "ACTIVITY", "resourceId": 99999,
|
||||
"items": [
|
||||
{"title": "寻龙诀未参加", "amount": 100, "unitLabel": "/团", "settleScope": "PER_TEAM"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 卡丁车(按车结算,文案 /人)
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"resourceType": "ACTIVITY", "resourceId": 88888,
|
||||
"items": [
|
||||
{"title": "卡丁车未骑", "amount": 120, "unitLabel": "/人", "settleScope": "PER_VEHICLE",
|
||||
"remark": "2 人/辆共享单价"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 套娃(时间窗口)
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"resourceType": "SCENIC", "resourceId": 77777,
|
||||
"items": [
|
||||
{"title": "老人只看大马戏", "amount": 65, "settleScope": "PER_PERSON"},
|
||||
{"title": "6/25 后没去或免票", "amount": 165, "settleScope": "PER_PERSON",
|
||||
"effectiveFrom": "2026-06-25", "effectiveTo": null}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 影响评估
|
||||
|
||||
- **后端**:仅 hl-resource-service 新增 1 张表 `resource_refund_note` + 3 个 admin 接口,对其他业务零影响。
|
||||
- **DB**:Flyway `V20260529_002__create_resource_refund_note.sql` 自动建表,重启服务后生效。
|
||||
- **前端**:新增弹窗 UI(建议在景区 / 活动详情页加按钮 → 弹窗 CRUD),完全独立的新页面,老页面不影响。
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 雪花 ID 透传为字符串(`noteId` / `resourceId`),前端**不要 `Number()`**。
|
||||
2. 资源软删后的退费说明不会自动清理,运营侧需先删退费说明再删资源(否则成孤儿数据)。
|
||||
3. 同资源不可有 2 份生效退费说明(DB 唯一键约束)。
|
||||
4. 删除是软删,可同资源重建;不支持物理删除。
|
||||
|
||||
---
|
||||
|
||||
## 关联
|
||||
|
||||
- **Issue**: [#3272](https://git.1814.love:8443/wx/HL/issues/3272)
|
||||
- **PR**: [#3273](https://git.1814.love:8443/wx/HL/pulls/3273) - feat(resource): 新增资源退费说明 CRUD 模块
|
||||
- **Commit**: [ffae5ab90](https://git.1814.love:8443/wx/HL/commit/ffae5ab90)
|
||||
- **后续 PR**(不在本期):
|
||||
- 产品服务 `ProductDetailVO.NodeItem.refundNote` 注入(参考 #3147 serviceStandard 模式)
|
||||
- 订单 `OrderProductSnapshotContent` 加 refundNote 反序列化(10 行)
|
||||
- 行程单 PDF 渲染退费表(订单 v3 + PDF 服务)
|
||||
- 核单 Step 5 录入半结构化对接(可选)
|
||||
@ -0,0 +1,149 @@
|
||||
# 二期 v3:订单 orderStatus / flowStatus 字段补 label 中文映射
|
||||
|
||||
> **服务**: hl-order-service-v3
|
||||
> **PR**: #3284
|
||||
> **Issue**: #3283
|
||||
> **日期**: 2026-05-30
|
||||
> **影响**: 🟢 **非破坏性**新增字段。前端从前自行映射 `AWAITING_PROFILE → "待补全信息"` 等,现在后端直接给。老字段 `orderStatus` / `flowStatus`(英文枚举)保留不动,新增 `orderStatusName` / `flowStatusName` 中文 label 同时返回。
|
||||
|
||||
---
|
||||
|
||||
## 总览(前端 mmg 必读)
|
||||
|
||||
订单列表 / 详情 / 创建响应里的 `orderStatus` 和 `flowStatus` 字段历史上**只返英文枚举**(`CUSTOMIZING` / `AWAITING_PROFILE` 等),前端要查表自行翻译。本期后端直接拼好中文 label 返回,前端**直接用 `xxxStatusName` 字段展示**即可。
|
||||
|
||||
旧字段保留,前端老逻辑零改动。
|
||||
|
||||
---
|
||||
|
||||
## 接口清单(3 个响应增字段)
|
||||
|
||||
### 1. 订单列表
|
||||
|
||||
```
|
||||
GET /v3/admin/order
|
||||
```
|
||||
|
||||
**响应** `data.records[].xxx` 新增 2 字段:
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"orderStatus": "CUSTOMIZING",
|
||||
"orderStatusName": "定制中", // 🆕 中文名
|
||||
"flowStatus": "AWAITING_PROFILE",
|
||||
"flowStatusName": "待补全信息" // 🆕 中文名
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 订单详情
|
||||
|
||||
```
|
||||
GET /v3/admin/order/{id}/detail
|
||||
```
|
||||
|
||||
**响应** `data.main` 同样新增 2 字段:
|
||||
|
||||
```jsonc
|
||||
"main": {
|
||||
"orderStatus": "TRAVELLING",
|
||||
"orderStatusName": "出行中", // 🆕
|
||||
"flowStatus": "TRAVELLING",
|
||||
"flowStatusName": "出行中" // 🆕
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 创建订单响应
|
||||
|
||||
```
|
||||
POST /v3/admin/order
|
||||
```
|
||||
|
||||
**响应** `data` 新增 1 字段(`orderStatusName` 早期已有,本期补 `flowStatusName`):
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"orderStatus": "PENDING_PAY",
|
||||
"orderStatusName": "待支付",
|
||||
"flowStatus": "AWAITING_PAY",
|
||||
"flowStatusName": "待支付" // 🆕
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 状态枚举完整对照表
|
||||
|
||||
### `orderStatus`(粗状态 6 个)
|
||||
|
||||
| 枚举值 | 中文名 |
|
||||
|---|---|
|
||||
| `PENDING_PAY` | 待支付 |
|
||||
| `CUSTOMIZING` | 定制中 |
|
||||
| `PENDING_DEPARTURE` | 待出行 |
|
||||
| `TRAVELLING` | 出行中 |
|
||||
| `COMPLETED` | 已完成 |
|
||||
| `CANCELLED` | 已取消 |
|
||||
|
||||
### `flowStatus`(细状态 16 个)
|
||||
|
||||
| 枚举值 | 中文名 |
|
||||
|---|---|
|
||||
| `AWAITING_PAY` | 待支付 |
|
||||
| `AWAITING_PROFILE` | 待补全信息 |
|
||||
| `AWAITING_HOTEL_SUBMIT` | 待提交房型 |
|
||||
| `AWAITING_HOTEL_CLAIM` | 待抢房 |
|
||||
| `HOTEL_IN_PROGRESS` | 房控处理中 |
|
||||
| `HOTEL_NEED_ADJUST` | 房控需调整 |
|
||||
| `AWAITING_VEHICLE_SUBMIT` | 待提交用车 |
|
||||
| `VEHICLE_IN_PROGRESS` | 车控处理中 |
|
||||
| `VEHICLE_NEED_ADJUST` | 车控需调整 |
|
||||
| `PENDING_CONFIRM` | 待确认 |
|
||||
| `PENDING_DEPARTURE` | 待出行 |
|
||||
| `TRAVELLING` | 出行中 |
|
||||
| `PENDING_REVIEW` | 待核单 |
|
||||
| `REVIEWING` | 核单中 |
|
||||
| `SETTLED` | 已结算 |
|
||||
| `COMPLETED` | 已完成 |
|
||||
| `CANCELLED` | 已取消 |
|
||||
|
||||
> ⚠️ **注意**:本 PR 后紧跟的 PR #3286 改了其中 2 个 label —— `待提交房型 → 待提交配房需求`、`待提交用车 → 待配车需求`。**实际部署后看到的是 PR #3286 的新文案**,前端如果按这俩老文案做字符串硬比较需要更新(详见 PR #3286 changelog)。
|
||||
|
||||
---
|
||||
|
||||
## 容错(前端可忽略)
|
||||
|
||||
- 后端拿到 null 或未知枚举(历史脏数据)会回退:返回原值而不是抛 500,前端不会看到"待x"等乱码。
|
||||
- 即便后端返回原英文枚举值(如未知 `XXXXX`),前端展示也能落 fallback。
|
||||
|
||||
---
|
||||
|
||||
## 业务边界
|
||||
|
||||
- 老字段 `orderStatus` / `flowStatus` 保留英文枚举(**契约不变**)
|
||||
- 仅新增 `orderStatusName` / `flowStatusName` 中文
|
||||
- 前端**老逻辑零改动**也能跑(旧字段还在)
|
||||
- 改成展示 `xxxStatusName` 后,前端不需要自己维护英文 → 中文映射表
|
||||
|
||||
---
|
||||
|
||||
## 影响评估
|
||||
|
||||
- **后端**:仅 hl-order-service-v3 改了 5 个文件(3 VO + Converter + OrderService),无 DB 改动,重启服务后生效。
|
||||
- **前端**:可选改造——把硬编码映射表删掉,直接用 `xxxStatusName`。改不改都不影响功能。
|
||||
- **mp 端**:本 PR 暂未改 `OrderLookupMpService`(仍是 mock 假数据),真业务化时一起补。
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 如果你的前端代码有硬编码的英文→中文映射表(如 `{ AWAITING_PROFILE: "待补全信息" }`),建议删掉,改用 `flowStatusName` 字段,避免后端枚举改了文案前端跟不上。
|
||||
2. 文案的"权威源"是后端枚举(`OrderStatus` / `OrderFlowStatus`),运营如果要求改文案直接改后端,前端无感跟随。
|
||||
|
||||
---
|
||||
|
||||
## 关联
|
||||
|
||||
- **Issue**: [#3283](https://git.1814.love:8443/wx/HL/issues/3283)
|
||||
- **PR**: [#3284](https://git.1814.love:8443/wx/HL/pulls/3284) - fix(order-v3): orderStatus/flowStatus 补 label 中文映射
|
||||
- **Commit**: [cb85f0f76](https://git.1814.love:8443/wx/HL/commit/cb85f0f76)
|
||||
- **接续 PR**: [#3286](https://git.1814.love:8443/wx/HL/pulls/3286) - feat(order-v3): 8 步步骤条字段 + 修 2 文案(紧接本 PR,建议一起看)
|
||||
@ -0,0 +1,204 @@
|
||||
# 二期 v3:订单接口加 flowStep / flowStepTotal / flowDisplayText 步骤条字段 + 修 2 个文案
|
||||
|
||||
> **服务**: hl-order-service-v3
|
||||
> **PR**: #3286
|
||||
> **Issue**: #3285
|
||||
> **日期**: 2026-05-30
|
||||
> **影响**: 🟡 **非破坏性**新增字段 + **文案修订**。前端从前自己拼 `"1/8 · 待补全信息"`,现在后端直接给 `flowStep` / `flowStepTotal` / `flowDisplayText` 三字段,前端拿着就显示。同时修了 2 个枚举 label 文案。
|
||||
|
||||
---
|
||||
|
||||
## 总览(前端 mmg 必读)
|
||||
|
||||
接续 PR #3284(status label 中文),本期把"订单步骤条"所需数据全部下沉到后端:
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"flowStep": 1, // 🆕 当前步序号 0=待支付前, 1-8=进行中, null=终态/未知
|
||||
"flowStepTotal": 8, // 🆕 总步数固定 8
|
||||
"flowDisplayText": "待补全信息" // 🆕 中文文案,只中文不带"X/8 · ",前端按需自拼
|
||||
}
|
||||
```
|
||||
|
||||
前端从前的 `currentStep / totalSteps + 自己映射中文` 逻辑全部可删,直接用本期 3 字段。
|
||||
|
||||
**同时**:修了 2 个 `OrderFlowStatus` 枚举 label 文案(影响 `flowStatusName` 字段返回):
|
||||
|
||||
| 枚举值 | 旧文案 | 新文案 |
|
||||
|---|---|---|
|
||||
| `AWAITING_HOTEL_SUBMIT` | 待提交房型 | **待提交配房需求** |
|
||||
| `AWAITING_VEHICLE_SUBMIT` | 待提交用车 | **待配车需求** |
|
||||
|
||||
---
|
||||
|
||||
## 接口清单(3 个响应增字段)
|
||||
|
||||
### 1. 订单列表
|
||||
|
||||
```
|
||||
GET /v3/admin/order
|
||||
```
|
||||
|
||||
**响应** `data.records[].xxx` 在 PR #3284 基础上再加 3 字段:
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"orderStatus": "CUSTOMIZING",
|
||||
"orderStatusName": "定制中",
|
||||
"flowStatus": "AWAITING_PROFILE",
|
||||
"flowStatusName": "待补全信息",
|
||||
"flowStep": 1, // 🆕
|
||||
"flowStepTotal": 8, // 🆕
|
||||
"flowDisplayText": "待补全信息" // 🆕
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 订单详情
|
||||
|
||||
```
|
||||
GET /v3/admin/order/{id}/detail
|
||||
```
|
||||
|
||||
**响应** `data.main` 同样加 3 字段(位置和列表相同)。
|
||||
|
||||
### 3. 创建订单响应
|
||||
|
||||
```
|
||||
POST /v3/admin/order
|
||||
```
|
||||
|
||||
**响应** 加 3 字段;创单初态固定:
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"flowStep": 0,
|
||||
"flowStepTotal": 8,
|
||||
"flowDisplayText": "待支付"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8 步映射表(16 → 8)
|
||||
|
||||
**优先级**:`orderStatus` 终态 > `flowStatus` 步骤映射
|
||||
|
||||
| 触发条件 | `flowStep` | `flowDisplayText` |
|
||||
|---|---|---|
|
||||
| `orderStatus = CANCELLED` | `null` | "已取消" |
|
||||
| `orderStatus = COMPLETED` | `null` | "已完成" |
|
||||
| `flowStatus = AWAITING_PAY` | `0` | "待支付" |
|
||||
| `flowStatus = AWAITING_PROFILE` | `1` | "待补全信息" |
|
||||
| `flowStatus = AWAITING_HOTEL_SUBMIT` | `2` | **"待提交配房需求"** |
|
||||
| `flowStatus = AWAITING_HOTEL_CLAIM` | `2` | "待抢房" |
|
||||
| `flowStatus = HOTEL_IN_PROGRESS` | `2` | "房控处理中" |
|
||||
| `flowStatus = HOTEL_NEED_ADJUST` | `2` | "房控需调整" |
|
||||
| `flowStatus = AWAITING_VEHICLE_SUBMIT` | `3` | **"待配车需求"** |
|
||||
| `flowStatus = VEHICLE_IN_PROGRESS` | `3` | "车控处理中" |
|
||||
| `flowStatus = VEHICLE_NEED_ADJUST` | `3` | "车控需调整" |
|
||||
| `flowStatus = PENDING_CONFIRM` | `4` | "待确认" |
|
||||
| `flowStatus = PENDING_DEPARTURE` | `5` | "待出行" |
|
||||
| `flowStatus = TRAVELLING` | `6` | "出行中" |
|
||||
| `flowStatus = PENDING_REVIEW` | `7` | "待核单" |
|
||||
| `flowStatus = REVIEWING` | `8` | "核单中" |
|
||||
| `flowStatus = SETTLED` | `8` | "已结算" |
|
||||
|
||||
**说明**:
|
||||
|
||||
- 配房 4 个并行子态(`AWAITING_HOTEL_SUBMIT` / `_CLAIM` / `HOTEL_IN_PROGRESS` / `_NEED_ADJUST`)都归到 step 2
|
||||
- 配车 3 个并行子态都归到 step 3
|
||||
- `REVIEWING` 和 `SETTLED` 都归到 step 8(结算后整体收尾)
|
||||
- `CANCELLED` / `COMPLETED` 是终态,不在 8 步串行里,`flowStep` 返 null
|
||||
- 未知 / 历史脏数据:`flowStep=null`, `flowDisplayText=` 原英文值(fallback 不抛错)
|
||||
|
||||
---
|
||||
|
||||
## 前端如何用(推荐)
|
||||
|
||||
### 推荐方式 1:只显示 `flowDisplayText`(最简单)
|
||||
|
||||
```html
|
||||
<div class="status">{{ order.flowDisplayText }}</div>
|
||||
<!-- 渲染结果: 待补全信息 / 出行中 / 已取消 等 -->
|
||||
```
|
||||
|
||||
### 推荐方式 2:进度条 + 中文(拼分子分母)
|
||||
|
||||
```html
|
||||
<div v-if="order.flowStep !== null">
|
||||
{{ order.flowStep }}/{{ order.flowStepTotal }} · {{ order.flowDisplayText }}
|
||||
</div>
|
||||
<div v-else>
|
||||
{{ order.flowDisplayText }} <!-- 终态不带 X/8 -->
|
||||
</div>
|
||||
<!-- 渲染示例: "1/8 · 待补全信息" / "已取消" -->
|
||||
```
|
||||
|
||||
### 推荐方式 3:步骤条 UI(按 flowStep 高亮)
|
||||
|
||||
如果有 8 段步骤条 UI 组件,按 `flowStep` 高亮当前段:
|
||||
|
||||
```jsonc
|
||||
const stepNames = ["待支付", "补全信息", "配房需求", "配车需求",
|
||||
"确认", "出行准备", "出行", "核单"];
|
||||
// 用 flowStep 高亮 stepNames[flowStep - 1]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 文案变更详情(重点关注)
|
||||
|
||||
| 字段 | 旧值 | 新值 |
|
||||
|---|---|---|
|
||||
| `flowStatusName`(PR #3284 字段)| "待提交房型" | "待提交配房需求" |
|
||||
| `flowStatusName` | "待提交用车" | "待配车需求" |
|
||||
| `flowDisplayText`(本 PR 字段)| - | 同上 |
|
||||
|
||||
**前端需要确认的事**:
|
||||
|
||||
1. 如果有按 **"待提交房型"** / **"待提交用车"** 老文案做字符串硬比较(如 `if (status === "待提交房型")`),需要改成新文案或改用枚举值比较。
|
||||
2. 如果只是 **展示**(不做逻辑判断),无需改动——文案直接显示新值即可。
|
||||
|
||||
我们后端搜了一遍**未发现**前端这个老文案的硬比较,但前端代码后端看不到,**请前端 mmg 自己 grep 确认**。
|
||||
|
||||
---
|
||||
|
||||
## 容错(前端可忽略)
|
||||
|
||||
- `flowStatus` 是历史脏数据(枚举里没有)→ `flowStep = null`, `flowDisplayText = 原始值`
|
||||
- `orderStatus = null` → `flowStep = null`, `flowDisplayText = "未知"`
|
||||
- 前端按 `flowStep === null` 判断终态/未知,按 `flowDisplayText` 兜底展示,绝不会拿到空字符串。
|
||||
|
||||
---
|
||||
|
||||
## 业务边界
|
||||
|
||||
- 老字段 `flowStatus` / `flowStatusName` 保留(契约不变)
|
||||
- 仅新增 3 字段 + 修订 2 个枚举 label 文案
|
||||
- 8 步是**前端展示概念**,后端的 `OrderFlowStatus` 仍是 16 个细状态(DB 落地不变)
|
||||
- 步骤条只是**展示视角**的简化,业务逻辑仍按 16 个 `flowStatus` 跑
|
||||
|
||||
---
|
||||
|
||||
## 影响评估
|
||||
|
||||
- **后端**:hl-order-service-v3 改了 7 个文件(枚举 + Converter + 3 VO + Service + 测试),无 DB 改动,重启服务后生效。
|
||||
- **前端**:可选改造——把"1/8"拼接逻辑改用后端 3 字段。改不改都不影响功能(老逻辑还能跑)。
|
||||
- **mp 端**:本 PR 暂未改 mp(mock service),真业务化时一并补。
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **文案修订是契约变更**:如果前端按老文案做字符串硬比较,必须改。展示用的话无影响。
|
||||
2. **flowStep 可能为 null**:终态(已取消/已完成/历史脏数据)时为 null,前端按 null 处理"不显示分子"或"显示终态文案"。
|
||||
3. **创单后立即调列表**:会看到 `flowStep=0` + `flowDisplayText="待支付"`,符合"还没开始走流程"语义。
|
||||
|
||||
---
|
||||
|
||||
## 关联
|
||||
|
||||
- **Issue**: [#3285](https://git.1814.love:8443/wx/HL/issues/3285)
|
||||
- **PR**: [#3286](https://git.1814.love:8443/wx/HL/pulls/3286) - feat(order-v3): 订单接口加 8 步步骤条字段 + 修 2 个文案
|
||||
- **Commit**: [fd533fdaa](https://git.1814.love:8443/wx/HL/commit/fd533fdaa)
|
||||
- **前置 PR**: [#3284](https://git.1814.love:8443/wx/HL/pulls/3284) - status label 中文(建议一起看)
|
||||
正在加载...
x
在新工单中引用
屏蔽一个用户