changelog(7149): 更正错误码优先级口径——入口结构校验先于状态校验,对外只变团单 582099 先于 582016;冻结期例外按最高版本组
changelog-filename-gate / validate (push) Successful in 2s
changelog-filename-gate / validate (push) Successful in 2s
复审指出原文把事务内 doUpsertHotelRequirement 的校验顺序写成公开接口整体优先级,忽略了直提入口进事务前的团单/结构前置校验。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XYL5S9SsBtkg7aGyFAbrrQ
这个提交包含在:
@@ -140,9 +140,9 @@ base: "dev-v3"
|
||||
#### 业务边界
|
||||
|
||||
- 团期闸门(房车共用):`RECRUITING / RESOURCE_PREPARING` 放行;`MATERIAL_PREPARING / PENDING_DEPARTURE / TRAVELLING / REVIEWING / SETTLED` 及未知状态 589536;`CANCELLED` / 查不到团期 589501;核心订单不查团期。
|
||||
- 冻结期例外:该户用房需求最新一版为 `REJECTED_TO_CONSULTANT`(团期管理员打回)时放行重提,新版本回到 `PENDING_REVIEW`;之后再改仍 589536,要再改只能再次被打回。
|
||||
- 冻结期例外:该户用房需求最高版本组(同 version 的一组行,含已失活的打回行;有生效行看生效行,否则组内任一行)为 `REJECTED_TO_CONSULTANT`(团期管理员打回)时放行重提,新版本回到 `PENDING_REVIEW`;之后再改仍 589536,要再改只能再次被打回。
|
||||
- 团单房型间数必填按「段首候选 rooms 行」判,与全团需求汇总 `requirement-summary` 同口径;旧结构(无 `rooms[]`)按段级 `roomCategory + roomCount` 合成一行判。
|
||||
- 校验顺序(PR #7184 起):订单状态(582017)→ 团期闸门(589536 / 589501)→ 晚数匹配(582011)→ 团单房型间数(582099,含房数为空 / 0)→ 通用结构校验(582098 / 582016 / 582019);任一拒绝均在写库之前,无新版本、`room_control_status` 不变。核心订单仍以通用结构校验给码(房数 0 → 582016)。
|
||||
- 校验顺序(接口对外可观察口径,PR #7184 / #7200 起):本接口**进事务前**先做入口校验——团单房型间数(582099,仅团单,含房数为空 / 0)→ 通用结构校验(582098 / 582016 / 582019 / 582020);都通过才进事务依次查订单状态(582017)→ 团期闸门(589536 / 589501)→ 晚数匹配(582011)→ 已配房晚改自订(582097)。事务内再跑的 582099 / 结构校验只是兜底,不会先于入口触发。因此**结构类错误仍先于订单状态与团期闸门返回**(冻结期团单缺房型得到 582099 而不是 589536);本单对外只改变一点:团单 582099 先于 582016。任一拒绝均在写库之前,无新版本、`room_control_status` 不变。核心订单仍以通用结构校验给码(房数 0 → 582016)。
|
||||
- 成功后 `order_main.room_control_status=PENDING_REVIEW`(既有行为),团期成团时定制师不再产生「房型需求 · 待提交」待办。
|
||||
|
||||
### 2. 订单调整统一提交 `POST /v3/admin/order/{id}/adjustment/submit`
|
||||
@@ -311,7 +311,7 @@ base: "dev-v3"
|
||||
- **冻结期打回只给一次重提机会**:重提后最新版变 `PENDING_REVIEW`,再改回到 589536;这是有意设计(改需求须经管理员再次打回)。
|
||||
- **自订晚**:`customerSelfBooked=true` 的晚不做房型校验;全团汇总 `requirement-summary` 也整晚跳过(PR #7184 复审补漏),残留 `segments/rooms` 不计入采购分母、不再出「未知」桶——前端标记自订后仍建议清空该晚 `segments`,但后端不依赖它。
|
||||
- **未知团期状态**按冻结处理(fail closed),不会误放行。
|
||||
- **错误码优先级变化(PR #7184,核心订单也受影响)**:结构校验(582098 / 582016 / 582019 / 582020)从「最先」挪到订单状态(582017)、团期闸门(589536 / 589501)、晚数匹配(582011)、已配房晚改自订(582097)之后;同一请求同时有结构错误和前置错误时,现在先返回前置错误码。前端若按错误码分支提示需按新顺序理解,语义是「更根因的错误优先」。
|
||||
- **错误码优先级(2026-09-06 复审更正,以本条为准)**:两条对外入口的可观察顺序都是「结构类校验先于状态类校验」——`PUT …/hotel-requirement` 在进事务前先做 团单 582099 → 通用结构 582098 / 582016 / 582019 / 582020,之后才是 582017 → 589536 / 589501 → 582011 → 582097;`adjustment/submit` 在自身状态边界守卫之后、任何写库与 Feign 之前先做 团单 582099 → 通用结构,团期闸门 589536 / 589501 与晚数 582011 在落库阶段。本单对外**唯一**的优先级变化是团单 582099 先于 582016(两入口一致)。PR #7184 把事务内 `doUpsertHotelRequirement` 的结构校验挪到闸门之后只是内部兜底顺序(供改期减天等内部路径),对外不可观察,核心订单的错误码顺序没有变化。本文早先版本写「结构校验挪到订单状态 / 闸门之后、核心订单也受影响」是把事务内顺序误当成接口整体优先级。
|
||||
- **调整入口同口径(PR #7184)**:`adjustment/submit` 对团期子订单同样先做团单房型间数校验,房数为空 / 0 也返回 582099「第 N 晚第 M 段」,不再先出 582016。
|
||||
- **全团汇总某晚全团自订则无该晚条目**:`dailyRoomBreakdown` 按 dayNumber 升序但不保证连续,前端逐日表按 dayNumber 对齐、不要按下标。
|
||||
- **子订单详情统计同步(PR #7184)**:订单详情 `hotelRequirementBrief.totalRoomCount / roomTypeSummary` 也不再计入自订晚残留段,与全团汇总一致;该晚仍出现在 `days[]` 里,并**新增响应字段** `hotelRequirementBrief.days[].customerSelfBooked`(Boolean,纯新增不破坏契约)供前端解释「段里有房型行但不计入总数」。
|
||||
|
||||
在新工单中引用
屏蔽一个用户