[changelogs-v2/2026-05] §1/§2 接口 5 处契约不明 / 冲突,前端接入阻塞 #1

已关闭
mmg2026-05-19 09:31:27 +08:00创建 · 3 评论
管理员

背景

接入 2026-05-18 推送的 v3 订单服务 25 个新接口(changelogs-v2/2026-05/18_§1_订单核心模块-新增接口-管理后台.md + 18_§2_traveler模块-新增接口-管理后台.md)时,前端梳理出以下 5 处契约不明或互相冲突的地方,需后端确认后才能继续视图层接入。


1. §1.3.1 主聚合 progressStepper.nodes[].subItems.subStatus 枚举集不完整

文档示例只见到 subStatus: "DONE",但字段表格里没列完整枚举。

问题:

  • ASSIGN_PARALLEL 节点的 subItems[].subStatus 完整枚举是哪些?(我们目前推测有 DONE / ACTIVE / PENDING / NOT_APPLICABLE,但未确认)
  • 各值的语义?前端展示要按值上不同颜色/图标。

2. §2.1 出行人列表字段表与示例不一致 + transportPlanIds 类型在两处不同

问题 2a:§2.1 表格 header 写"每条 17 字段",但实际列出 16 个字段。漏的是哪个?

问题 2b:transportPlanIds 类型冲突:

  • §2.1 表格里标 List<Long>
  • §1.3.1 主聚合示例里 traveler 节点的 transportPlanIds["80012345"](字符串数组)

前端立场:无论后端选 Long 还是 String,JSON 序列化后雪花 ID 超 Number.MAX_SAFE_INTEGER 会精度丢失,前端一律按 String 透传。强烈建议两处统一 serialize 成 String,避免 long 直接出 JSON 触发精度问题。


3. §2.3 「单个出行人新增」路径文档表格与示例不一致

  • 表格写 POST /v3/admin/order/{id}/traveler/add
  • 示例里 curl 写的是 POST /v3/admin/order/.../travelers(复数,无 /add)

问题:哪个是真路径?前端目前按表格实现走 /traveler/add,需后端确认或统一文档。


4. 错误码 581120 在 §2.4 和 §2.8 重复

  • §2.4「出行人软删」581120 = 最后一个成人禁止删除
  • §2.8「智能批量解析」581120 = 原文超长

问题:同一错误码不同接口下含义不同。前端 toast 文案需要根据接口路径区分,建议后端拆开重新分配两个 code,避免后续日志/监控告警混淆。


5. §1.7 transition 接口的 eventCode 枚举集未完整展开

POST /v3/admin/order/{id}/transition 入参 eventCode 引用 §6.17 / §6.18 / §6.19,但这些章节在汇总文档里只列了使用场景,没列具体的字符串枚举值清单

问题:前端"确认锁单 / 关闭订单 / 触发尾款支付 / 出团 / 完结订单 / 取消..."等所有按钮在调 transition 时,具体要传哪个 eventCode 字符串?能否补一份完整枚举表(eventCode → 触发场景 → 前置状态 → 目标状态)?


影响范围

5 个问题不全部确认,前端 Layer 2 视图层接入(list / detail 主聚合 + 6 Tab + 12 Modal)无法收尾。#5(transition eventCode)优先级最高,影响订单详情底部所有操作按钮的接线。

前端临时处理

API 文件 src/api/orderV2.js 已实现 25 个函数(已 merge 到本地分支),按文档表格为准走,#2(transportPlanIds) 一律按 String 透传,#3 路径走 /traveler/add。视图层接入暂停等回复。

## 背景 接入 2026-05-18 推送的 v3 订单服务 25 个新接口(`changelogs-v2/2026-05/18_§1_订单核心模块-新增接口-管理后台.md` + `18_§2_traveler模块-新增接口-管理后台.md`)时,前端梳理出以下 5 处契约不明或互相冲突的地方,需后端确认后才能继续视图层接入。 --- ### 1. §1.3.1 主聚合 `progressStepper.nodes[].subItems.subStatus` 枚举集不完整 文档示例只见到 `subStatus: "DONE"`,但字段表格里没列完整枚举。 **问题**: - `ASSIGN_PARALLEL` 节点的 `subItems[].subStatus` 完整枚举是哪些?(我们目前推测有 `DONE / ACTIVE / PENDING / NOT_APPLICABLE`,但未确认) - 各值的语义?前端展示要按值上不同颜色/图标。 --- ### 2. §2.1 出行人列表字段表与示例不一致 + `transportPlanIds` 类型在两处不同 **问题 2a**:§2.1 表格 header 写"每条 17 字段",但实际列出 16 个字段。漏的是哪个? **问题 2b**:`transportPlanIds` 类型冲突: - §2.1 表格里标 `List<Long>` - §1.3.1 主聚合示例里 traveler 节点的 `transportPlanIds` 是 `["80012345"]`(字符串数组) **前端立场**:无论后端选 Long 还是 String,JSON 序列化后雪花 ID 超 `Number.MAX_SAFE_INTEGER` 会精度丢失,前端一律按 String 透传。**强烈建议两处统一 serialize 成 String**,避免 long 直接出 JSON 触发精度问题。 --- ### 3. §2.3 「单个出行人新增」路径文档表格与示例不一致 - 表格写 `POST /v3/admin/order/{id}/traveler/add` - 示例里 curl 写的是 `POST /v3/admin/order/.../travelers`(复数,无 `/add`) **问题**:哪个是真路径?前端目前按**表格**实现走 `/traveler/add`,需后端确认或统一文档。 --- ### 4. 错误码 `581120` 在 §2.4 和 §2.8 重复 - §2.4「出行人软删」`581120` = 最后一个成人禁止删除 - §2.8「智能批量解析」`581120` = 原文超长 **问题**:同一错误码不同接口下含义不同。前端 toast 文案需要根据接口路径区分,建议后端拆开重新分配两个 code,避免后续日志/监控告警混淆。 --- ### 5. §1.7 `transition` 接口的 `eventCode` 枚举集未完整展开 `POST /v3/admin/order/{id}/transition` 入参 `eventCode` 引用 §6.17 / §6.18 / §6.19,但这些章节在汇总文档里只列了使用场景,**没列具体的字符串枚举值清单**。 **问题**:前端"确认锁单 / 关闭订单 / 触发尾款支付 / 出团 / 完结订单 / 取消..."等所有按钮在调 transition 时,具体要传哪个 `eventCode` 字符串?能否补一份完整枚举表(eventCode → 触发场景 → 前置状态 → 目标状态)? --- ## 影响范围 5 个问题不全部确认,前端 Layer 2 视图层接入(list / detail 主聚合 + 6 Tab + 12 Modal)无法收尾。**#5(transition eventCode)优先级最高**,影响订单详情底部所有操作按钮的接线。 ## 前端临时处理 API 文件 `src/api/orderV2.js` 已实现 25 个函数(已 merge 到本地分支),按文档**表格为准**走,#2(transportPlanIds) 一律按 String 透传,#3 路径走 `/traveler/add`。视图层接入暂停等回复。
yst2026-05-19 09:31:59 +08:00mmg 指派
协作者

已按代码事实修订两份 changelog 并推送到 main,commit 89a1938请拉取最新版后继续视图层接入

推送后文件位置

修改内容

你提的 5 项

# 问题 处理
subStatus 枚举不全 §3.3 progressStepper 标注「运行时暂返 null,派生未实现」+ status 枚举补 NOT_APPLICABLE + 明示 subStatus 枚举同 status
❷a 17 字段 vs 实际 16 §2.1 表头 17 → 16(文档 off-by-one 笔误)
❷b transportPlanIds 类型冲突 字段表 List<Long> 保留(正确),补全局 Jackson 规则脚注:超 2^53-1 自动转 String,雪花 ID 一定出 String,示例值换 19 位真实雪花
/traveler/add vs /travelers curl 示例对齐字段表 → /traveler/add;§2.1 list curl 也对齐 → /traveler/list
581120 重复 §2.4:581119→581106,581120→581107;§2.8:581120→581131,581121→581132,581122→100501(HL 全局限流码),581123→581134(代码段位早已让位,文档没回写)
transition eventCode 枚举 §6.17 原本就完整列了 9 个;为防跳读,已在 §1.7 入参表行内冗余列出

顺手补的 4 项(代码实际与文档严重错位,前端验证时一定会再撞到)

# 问题 处理
α §6.2 orderStatus 列 7 个中文值,代码实际 10 个英文枚举透传 全表替换为 10 个英文值(PENDING_PAY / PENDING_COMPLETE / CUSTOMIZING / PENDING_DEPARTURE / PENDING_BALANCE / TRAVELLING / REVIEWING / SETTLED / REFUNDING / CANCELLED)+ 中文标签列
β §6.3 flowStatus 列 13 个中文值,代码实际 13 个英文枚举透传 全表替换为 13 个英文值(AWAITING_DEPOSIT / ... / CANCELLED_BEFORE_PAY)+ 中文标签列
γ §1.1 / §1.2 / §1.3.1 / §1.7 全部示例 orderStatus flowStatus 写中文 全部改英文枚举值("PENDING_DEPARTURE" 等)—— API 实际传/返的都是英文,中文标签前端自己映射
δ §1.3.1 OrderMainVO 字段表缺 6 个 Tab 状态徽标 + customerPhone 文档说 "admin 明文" 实际是 customerPhoneMasked 脱敏 字段表补 contractStatus / insuranceStatus / refundStatus / hasRefund / hasServiceStandard / hasFinanceDetail 6 个字段 + 改字段名

额外提醒

consultantSource 不是强枚举类(无 Java enum),是字符串。值域可能为 MANUAL / SHARED / DEFAULT_ASSIGNED / ROUND_ROBIN / LINK_BOUND,且 user-service 后续可能扩展。已在 §6.4 加完整 5 值表 + ⚠️「未知值兜底为 MANUAL 标签」的规则。前端做穷举 switch 时务必有 default 分支


如还有其他文档与实测不符的,继续提 issue。

已按代码事实修订两份 changelog 并推送到 `main`,commit [`89a1938`](https://git.1814.love:8443/wx/hl-api-changelog/commit/89a1938)。**请拉取最新版后继续视图层接入**。 ## 推送后文件位置 - §1 订单核心模块:[`changelogs-v2/2026-05/18_§1_订单核心模块-新增接口-管理后台.md`](https://git.1814.love:8443/wx/hl-api-changelog/src/branch/main/changelogs-v2/2026-05/18_%C2%A71_%E8%AE%A2%E5%8D%95%E6%A0%B8%E5%BF%83%E6%A8%A1%E5%9D%97-%E6%96%B0%E5%A2%9E%E6%8E%A5%E5%8F%A3-%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0.md) - §2 traveler 模块:[`changelogs-v2/2026-05/18_§2_traveler模块-新增接口-管理后台.md`](https://git.1814.love:8443/wx/hl-api-changelog/src/branch/main/changelogs-v2/2026-05/18_%C2%A72_traveler%E6%A8%A1%E5%9D%97-%E6%96%B0%E5%A2%9E%E6%8E%A5%E5%8F%A3-%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0.md) ## 修改内容 ### 你提的 5 项 | # | 问题 | 处理 | |---|---|---| | ❶ | subStatus 枚举不全 | §3.3 progressStepper 标注「运行时暂返 null,派生未实现」+ status 枚举补 `NOT_APPLICABLE` + 明示 subStatus 枚举同 status | | ❷a | 17 字段 vs 实际 16 | §2.1 表头 17 → 16(文档 off-by-one 笔误) | | ❷b | transportPlanIds 类型冲突 | 字段表 `List<Long>` 保留(正确),补全局 Jackson 规则脚注:超 `2^53-1` 自动转 String,**雪花 ID 一定出 String**,示例值换 19 位真实雪花 | | ❸ | `/traveler/add` vs `/travelers` | curl 示例对齐字段表 → `/traveler/add`;§2.1 list curl 也对齐 → `/traveler/list` | | ❹ | 581120 重复 | §2.4:581119→**581106**,581120→**581107**;§2.8:581120→**581131**,581121→**581132**,581122→**100501**(HL 全局限流码),581123→**581134**(代码段位早已让位,文档没回写) | | ❺ | transition eventCode 枚举 | §6.17 原本就完整列了 9 个;为防跳读,已在 §1.7 入参表行内冗余列出 | ### 顺手补的 4 项(代码实际与文档严重错位,前端验证时一定会再撞到) | # | 问题 | 处理 | |---|---|---| | α | §6.2 orderStatus 列 7 个中文值,代码实际 10 个**英文枚举**透传 | 全表替换为 10 个英文值(`PENDING_PAY / PENDING_COMPLETE / CUSTOMIZING / PENDING_DEPARTURE / PENDING_BALANCE / TRAVELLING / REVIEWING / SETTLED / REFUNDING / CANCELLED`)+ 中文标签列 | | β | §6.3 flowStatus 列 13 个中文值,代码实际 13 个**英文枚举**透传 | 全表替换为 13 个英文值(`AWAITING_DEPOSIT / ... / CANCELLED_BEFORE_PAY`)+ 中文标签列 | | γ | §1.1 / §1.2 / §1.3.1 / §1.7 全部示例 `orderStatus` `flowStatus` 写中文 | 全部改英文枚举值(`"PENDING_DEPARTURE"` 等)—— **API 实际传/返的都是英文,中文标签前端自己映射** | | δ | §1.3.1 OrderMainVO 字段表缺 6 个 Tab 状态徽标 + `customerPhone` 文档说 "admin 明文" 实际是 `customerPhoneMasked` 脱敏 | 字段表补 `contractStatus / insuranceStatus / refundStatus / hasRefund / hasServiceStandard / hasFinanceDetail` 6 个字段 + 改字段名 | ### 额外提醒 `consultantSource` **不是强枚举类**(无 Java enum),是字符串。值域可能为 `MANUAL / SHARED / DEFAULT_ASSIGNED / ROUND_ROBIN / LINK_BOUND`,且 user-service 后续可能扩展。已在 §6.4 加完整 5 值表 + ⚠️「未知值兜底为 MANUAL 标签」的规则。**前端做穷举 switch 时务必有 default 分支**。 --- 如还有其他文档与实测不符的,继续提 issue。
协作者

⚠️ 第一轮回复(89a1938)的 §6.2 / §6.3 部分作废,请改用 a47588b

缘起

你提的契约问题让我反查代码,结果发现一个更底层的问题:当时代码实现的 OrderStatus / OrderFlowStatus 本身就偏离了 SRS v5.48 §0.4 的设计。我第一轮直接按代码现状写进 changelog,等于把"代码偏离设计"固化成对外契约,前端按那个接入也是错的。

已做修正

1. 代码侧(HL PR #2589:把 OrderStatus / OrderFlowStatus 改回 SRS 设计:

  • OrderStatus 10 项 → 9 项:删 REFUNDING(SRS 决议:退款发起瞬间订单 order_status='CANCELLED',退款进度由 refund_status 子字段表达)
  • OrderFlowStatus 13 项 → 15 项:从支付节奏视角(AWAITING_DEPOSIT/DEPOSIT_PAID_PENDING_CONFIRM/CONFIRMED_PENDING_HOTEL...全量重写为业务环节视角(AWAITING_PROFILE/AWAITING_HOTEL_SUBMIT/HOTEL_IN_PROGRESS/PENDING_CONFIRM/...),与 SRS 中文 1:1 对齐
  • 状态机 5 条 INITIATE_REFUND → REFUNDING 改为 → CANCELLED(事件保留,目标态变)
  • mvn verify 1068 tests 0 failures 全绿

2. changelog 侧(本仓 commit a47588b

  • §6.2 整段重写:9 项(删 REFUNDING,PENDING_BALANCE 保留)
  • §6.3 整段重写:15 项业务术语
  • §3.1 / §3.2 / §3.3 / §3.11 / §3.14 共 5 处示例值同步对齐新 enum
    • 比如:示例 flowStatus 不再是 CONFIRMED_PENDING_DEPARTURE,而是 PENDING_DEPARTURE
    • §3.1 创单默认细态 AWAITING_DEPOSITAWAITING_PROFILE("待支付订金" → "待补全信息")

你需要做的

  1. 拉最新 main(commit a47588b),看 §6.2 / §6.3 表 + 示例的新值
  2. 重新映射你已写的 13 项细态映射:原来按 AWAITING_DEPOSIT/DEPOSIT_PAID_PENDING_CONFIRM/... 写的前端枚举映射全部要换名,改为 AWAITING_PROFILE/PENDING_CONFIRM/...
  3. 业务文案对应:旧的"待付订金"细态语义合并入"待补全信息";旧的"已确认配房中/已确认配车中/已确认待出行"分别对应新的"待提交房型"(房控分支)/"待提交用车"(车控分支)/"待出行"

顺手提醒

REFUNDING 这个值在 refund 模块自己还有(RefundApplication.status 用,记退款申请的状态),那是另一个域的字段。本次删的只是 OrderStatus.REFUNDING(订单粗态)。前端调退款相关接口时,refund_application.status 字段里仍可能见到 "REFUNDING",那是合法的,与本次改动无关。


抱歉来回折腾一次。第一次回复时没去对设计文档,是我的责任。如果还有不符的地方继续提 issue,谢谢!

## ⚠️ 第一轮回复([`89a1938`](https://git.1814.love:8443/wx/hl-api-changelog/commit/89a1938))的 **§6.2 / §6.3** 部分作废,请改用 [`a47588b`](https://git.1814.love:8443/wx/hl-api-changelog/commit/a47588b)。 ### 缘起 你提的契约问题让我反查代码,结果发现一个**更底层的问题**:当时代码实现的 `OrderStatus` / `OrderFlowStatus` 本身就偏离了 SRS v5.48 §0.4 的设计。我第一轮直接按代码现状写进 changelog,等于把"代码偏离设计"固化成对外契约,前端按那个接入也是错的。 ### 已做修正 **1. 代码侧(HL PR [#2589](https://git.1814.love:8443/wx/HL/pulls/2589))**:把 `OrderStatus` / `OrderFlowStatus` 改回 SRS 设计: - `OrderStatus` 10 项 → **9 项**:删 `REFUNDING`(SRS 决议:退款发起瞬间订单 `order_status='CANCELLED'`,退款进度由 `refund_status` 子字段表达) - `OrderFlowStatus` 13 项 → **15 项**:从支付节奏视角(`AWAITING_DEPOSIT/DEPOSIT_PAID_PENDING_CONFIRM/CONFIRMED_PENDING_HOTEL...`)**全量重写**为业务环节视角(`AWAITING_PROFILE/AWAITING_HOTEL_SUBMIT/HOTEL_IN_PROGRESS/PENDING_CONFIRM/...`),与 SRS 中文 1:1 对齐 - 状态机 5 条 `INITIATE_REFUND → REFUNDING` 改为 `→ CANCELLED`(事件保留,目标态变) - `mvn verify` 1068 tests 0 failures 全绿 **2. changelog 侧(本仓 commit [`a47588b`](https://git.1814.love:8443/wx/hl-api-changelog/commit/a47588b))**: - §6.2 整段重写:9 项(删 REFUNDING,PENDING_BALANCE 保留) - §6.3 整段重写:15 项业务术语 - §3.1 / §3.2 / §3.3 / §3.11 / §3.14 共 5 处示例值同步对齐新 enum - 比如:示例 `flowStatus` 不再是 `CONFIRMED_PENDING_DEPARTURE`,而是 `PENDING_DEPARTURE` - §3.1 创单默认细态 `AWAITING_DEPOSIT` → `AWAITING_PROFILE`("待支付订金" → "待补全信息") ### 你需要做的 1. **拉最新 main**(commit `a47588b`),看 §6.2 / §6.3 表 + 示例的新值 2. **重新映射你已写的 13 项细态映射**:原来按 `AWAITING_DEPOSIT/DEPOSIT_PAID_PENDING_CONFIRM/...` 写的前端枚举映射全部要换名,改为 `AWAITING_PROFILE/PENDING_CONFIRM/...` 3. **业务文案对应**:旧的"待付订金"细态语义合并入"待补全信息";旧的"已确认配房中/已确认配车中/已确认待出行"分别对应新的"待提交房型"(房控分支)/"待提交用车"(车控分支)/"待出行" ### 顺手提醒 `REFUNDING` 这个值在 **refund 模块自己**还有(`RefundApplication.status` 用,记退款申请的状态),那是另一个域的字段。本次删的只是 **`OrderStatus.REFUNDING`**(订单粗态)。前端调退款相关接口时,`refund_application.status` 字段里仍可能见到 `"REFUNDING"`,那是合法的,与本次改动无关。 --- 抱歉来回折腾一次。第一次回复时没去对设计文档,是我的责任。如果还有不符的地方继续提 issue,谢谢!
作者
管理员

前端已消化两轮回复(subStatus / transportPlanIds / /traveler/add 路径 / 581120 / eventCode 5 处 + §6.2/§6.3 9+15 项重写)。代码 commit 见 v2.1 分支 258796fe / 7baa99af。关闭。

前端已消化两轮回复(subStatus / transportPlanIds / /traveler/add 路径 / 581120 / eventCode 5 处 + §6.2/§6.3 9+15 项重写)。代码 commit 见 v2.1 分支 258796fe / 7baa99af。关闭。
mmg2026-05-19 16:41:46 +08:00 关闭此工单
登录 并参与到对话中。
未选择标签
2 名参与者
通知
到期时间
未设置到期时间。
依赖工单

没有设置依赖项。

参考:wx/hl-api-changelog#1
没有提供说明。