changelog: #7210 复审返工补记——权限改按 token 当前角色判权、逐单打回清团级标记(PR #7242)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XYL5S9SsBtkg7aGyFAbrrQ
这个提交包含在:
API Changelog Bot
2026-09-07 11:52:02 +08:00
共同撰写人 Claude Opus 5
父节点 c39fb8ac24
当前提交 deef7dc56f
@@ -12,7 +12,7 @@ frontend_owner: "mmg"
frontend_ref: "" frontend_ref: ""
target_release: "" target_release: ""
verified_at: "2026-09-07" verified_at: "2026-09-07"
status_note: "后端已合 dev-v3(PR #7220、#7222)并部署测试服(order-v3 + user-service,HEAD 5ab5a6cbe),网关实测 AC-2/3/4/5/6/7/9/10/11/12/14/15/20/21 通过。破坏性变更:reject body 从可选改必填(orderIds/reason),前端与后端需同步上线。" status_note: "后端已合 dev-v3(PR #7220、#7222;复审返工 PR #7242)并部署测试服(order-v3 d482d08f9、user-service d482d08f9),原 AC 网关实测通过;复审返工 AC-24(临时角色越权 7 入口 589507)/ AC-26(逐单打回清团级标记 + 团级时间线)网关实测通过。破坏性变更:reject body 从可选改必填(orderIds/reason),前端与后端需同步上线。逐单打回契约不变,仅行为补齐。"
updated_at: "2026-09-07" updated_at: "2026-09-07"
base: "dev-v3" base: "dev-v3"
--- ---
@@ -21,7 +21,7 @@ base: "dev-v3"
> **服务**: `hl-order-service-v3`、`hl-user-service`(权限种子) > **服务**: `hl-order-service-v3`、`hl-user-service`(权限种子)
> **Issue**: #7210 > **Issue**: #7210
> **PR**: 待合并后回填 > **PR**: #7220、#7222、#7242(复审返工)
> **日期**: 2026-09-07 > **日期**: 2026-09-07
> **影响范围**: 管理后台团期详情「查看需求」Tab,逐单详情页面打回/分房入口 > **影响范围**: 管理后台团期详情「查看需求」Tab,逐单详情页面打回/分房入口
@@ -35,6 +35,8 @@ base: "dev-v3"
3. **逐单打回放宽与权限统一**:源状态由 `{PENDING_REVIEW}` 放宽为 `{PENDING_REVIEW, PENDING}`;已分房守卫改报 589535(批量与逐单入口都**先判已分房再判源状态**:房务认领后需求为 PROCESSING,已分房户一律 589535「请先由房务调整配房后再打回」,不会落成 589534)。逐单 reject/dispatch 四入口新增权限守卫 `group-batch:demand:confirm` (589507)。 3. **逐单打回放宽与权限统一**:源状态由 `{PENDING_REVIEW}` 放宽为 `{PENDING_REVIEW, PENDING}`;已分房守卫改报 589535(批量与逐单入口都**先判已分房再判源状态**:房务认领后需求为 PROCESSING,已分房户一律 589535「请先由房务调整配房后再打回」,不会落成 589534)。逐单 reject/dispatch 四入口新增权限守卫 `group-batch:demand:confirm` (589507)。
4. **复审返工(PR #7242)**:① 权限判定改按网关注入的**当前角色**(token 的 `X-Admin-Role`)而不是库里 `current_role_id`——短信登录得到的临时定制师身份即使库角色是 ADMIN,也对 confirm / confirm-check / reject 与四个逐单入口一律 589507(前端可据此提示「请用持码角色登录」);撤权 / 授权最迟 10 分钟生效(角色权限码缓存)。② 逐单打回(房 / 车)改经团级编排:同时清团级 `requirement_confirmed` 并写团级时间线 `BATCH_REQUIREMENT_REJECT`(extra 含本户 orderId),与整体确认 / 按户打回共用团级锁;请求 / 响应 / 错误码不变,前端团期详情在逐单打回成功后需**刷新团级「已确认」状态**。
--- ---
## 二、变更接口清单 ## 二、变更接口清单
@@ -337,6 +339,7 @@ POST /v3/admin/order/60123456789001/hotel-requirement/reject
- 新增权限 group-batch:demand:confirm - 新增权限 group-batch:demand:confirm
- 源状态放宽 {PENDING_REVIEW, PENDING} - 源状态放宽 {PENDING_REVIEW, PENDING}
- 已分房改报 589535 - 已分房改报 589535
- 复审返工(PR #7242):打回成功同时清团级 `requirement_confirmed=0` 并写团级时间线 `BATCH_REQUIREMENT_REJECT`(extra.orderIds=[本户]),与 confirm / reject 共用团级锁——**前端在逐单打回成功后须刷新团期「已确认」标记与时间线**;普通单仍 582083;「非团单」判定收紧为「解析不到所属团期行」(有 productBatchId 但团期行已删的脏数据由可打回变为 582083,错误码不变);权限改按 token 当前角色判
--- ---
@@ -401,6 +404,7 @@ POST /v3/admin/order/60123456789001/vehicle-requirement/reject
- 新增权限 group-batch:demand:confirm - 新增权限 group-batch:demand:confirm
- 源状态放宽 {PENDING_REVIEW, PENDING} - 源状态放宽 {PENDING_REVIEW, PENDING}
- 复审返工(PR #7242):同房侧,打回成功清团级 `requirement_confirmed=0` + 团级时间线 + 共锁;普通单仍 582083;权限改按 token 当前角色判
--- ---
@@ -607,6 +611,8 @@ POST /v3/admin/order/60123456789001/vehicle-requirement/dispatch
|---|---|---| |---|---|---|
| 整体确认 | 仅置标记,无缺失校验 | 缺失校验→置标记→逐户放行→通知房务 | | 整体确认 | 仅置标记,无缺失校验 | 缺失校验→置标记→逐户放行→通知房务 |
| 按户打回 | 置团级标记不改户状态 | 逐户 CAS 打回、房控同步、待办、站内信 | | 按户打回 | 置团级标记不改户状态 | 逐户 CAS 打回、房控同步、待办、站内信 |
| 逐单打回(房 / 车) | 只改需求行,团级 `requirement_confirmed` 不动、无团级时间线、不共锁 | 复审返工:同时清团级标记 + 团级时间线(extra 含本户)+ 与 confirm / reject 共锁 |
| 团期权限判定(含既有六码) | 按库 `current_role_id`(短信登录临时身份可借库角色权限) | 复审返工:按 token 当前角色 `X-Admin-Role`;SUPER_ADMIN 恒放行;角色权限码缓存 10 分钟 |
--- ---
@@ -630,7 +636,20 @@ POST /v3/admin/order/60123456789001/vehicle-requirement/dispatch
## 八、测试环境已验证 ## 八、测试环境已验证
待后端网关实测通过后补充。 - 原验收(2026-09-07,团 A `2096412454643802114`):AC-2/3/4/5/6/7/9/10/11/12/14/15/20/21/22 网关实测通过(含 50 户整体确认、confirm × reject 并发串行、冻结期闭环、589535 优先于 589534)。
- 复审返工(PR #7242,order-v3 `d482d08f9` / user-service `d482d08f9`):AC-24:`admin`(库角色 ADMIN 持码)短信登录得临时 CUSTOMIZER token,打 confirm-check / confirm / reject 与四个逐单入口共 7 次全部 589507,前后 DB 快照(团期标记 + 四户订单 + 房车需求 + 时间线计数)逐字节相同;密码重登后短信 token 立即失效(单会话顶号),ADMIN 200、SUPER_ADMIN 200、不持码 CUSTOMIZER 589507。AC-26:整团确认 `requirement_confirmed=1` 后逐单打回房需求 → 200、需求 `PENDING→REJECTED_TO_CONSULTANT / is_active=0`、`requirement_confirmed=0`、时间线新增 `BATCH_REQUIREMENT_REJECT` 且 `extra.orderIds=["2096633951715033089"]`;恢复确认后逐单打回车需求同样生效(`extra.orderIds=["2096633972502003714"]`)且房侧行未受影响;普通单房 / 车逐单打回均 582083、零写入、无残留时间线。6/6 检查通过,证据 `verify_7210_rework_evidence.json`。
---
## 九、复审返工(2026-09-07,PR #7242)
| 项 | 问题 | 修正 | 前端影响 |
|---|---|---|---|
| P1 权限 | 守卫经 `hasPermission(adminId)` 按库角色判权,短信登录的临时定制师身份借库角色(ADMIN)通过团期管理员动作 | 新增内部端点 `GET /internal/user/admin/role-has-permission`,守卫改按 token 当前角色判;覆盖 confirm / confirm-check / reject 与四个逐单入口及既有六个团期权限码 | 无契约变化。临时定制师身份对这些入口一律 589507,可引导切回持码角色;撤权最迟 10 分钟生效 |
| P2 逐单打回 | `hotel-requirement/reject`、`vehicle-requirement/reject` 只改需求行,整团确认后逐单打回会留下「该户未提交、整团已确认」 | 逐单打回改经团级编排:清 `requirement_confirmed` + 团级时间线 `BATCH_REQUIREMENT_REJECT` + 共锁 | 无契约变化。逐单打回成功后刷新团期详情的「已确认」标记与时间线 |
| P2 附带收紧 | 「非团单」旧判法只看 `productBatchId` 是否为空 | 改为「能否解析出所属团期行」 | 有 `productBatchId` 但团期行已删的脏数据由「可打回」变为 582083,错误码与文案不变 |
**部署顺序强约束**:`hl-user-service` 必须先于 `hl-order-service-v3` 上线。守卫改打新内部端点 `role-has-permission`,user-service 未部署时 Feign 404 降级 false,会让全部团期权限码(含看板 / 芯片 / 导出 / 成团 / 财务)对所有人返 589507,超管也不例外。
--- ---
@@ -647,8 +666,8 @@ POST /v3/admin/order/60123456789001/vehicle-requirement/dispatch
### 链接 ### 链接
- **Issue**: [#7210](https://git.1814.love:8443/wx/HL/issues/7210) - **Issue**: [#7210](https://git.1814.love:8443/wx/HL/issues/7210)
- **PR**: 待合并后回填 - **PR**: [#7220](https://git.1814.love:8443/wx/HL/pulls/7220)、[#7222](https://git.1814.love:8443/wx/HL/pulls/7222)、[#7242](https://git.1814.love:8443/wx/HL/pulls/7242)(复审返工)
- **Merge commit**: 待合并后回填 - **Merge commit**: `2e5812fdf`(#7220)、`5ab5a6cbe`(#7222)、`8d3b75671`(#7242)
### 联系人 ### 联系人