hl-api-changelog/changelogs-v2/2026-05/21_2821-2824_review-v3-followup_PR2833-2836-2840.md
API Changelog Bot ed10a93879 docs(changelog-v2): order-v3 review 跟进 (PR #2833-2836 + hotfix #2840)
review 检出 P0/P1 共 4 张工单(#2821-2824)修复落地测试服:
- HOUSE 配房工作台 §2.1-§2.5 + 询房 §3.3/§3.6 共 7 个接口路径迁移
- HOUSE-SWAP 越权校验 + 状态机 from 推导 + DRIVER 通知补发 + 4 个错误码同步文档
- 出行人 internal Feign transportPlanIds 真实化 + 错误码段位修正
- 大交通 TransportPlanVO Long 字段返字符串(防 JS 精度)+ batchReplace 加幂等
- order_todo 加唯一索引(hotfix V20260521_004 generated column UNIX_TIMESTAMP → COALESCE)
- 通知中心 internal VO 后缀 + dispatch 单一真相源(前端不调,内部规范)

前端必看:7 个路径变更 + Long 字段类型变化 + 出行人错误码段位 5 处。
2026-05-21 18:15:11 +08:00

9.5 KiB

order-v3 review 跟进:配房工作台 / 询房 URL 重排 + HOUSE swap 多项修复 + 出行人/大交通杂项

存放目录: 二期(v3 order-v3 标签)→ changelogs-v2/2026-05/ 服务: hl-order-service-v3 (8086) + hl-user-service (8081) PR: #2833 / #2834 / #2835 / #2836 / #2840(hotfix) Issue: #2821 / #2822 / #2823 / #2824 日期: 2026-05-21 影响范围: 管理端 HOUSE 配房工作台 + HOUSE 询房 + HOUSE 换酒店 + 出行人/大交通若干字段


⚠️ 关键变化(前端必看)

🔴 路径变更(配房工作台 + 询房,5+2=7 个接口)

前端按 API-SPEC-HOUSE-V1.1.html 文档对接,之前 4 个 PR (#2738-2754) 落地的代码路径与文档严重不一致,会全部 404;本批 PR #2833 已对齐文档。前端按文档实现的请直接对接新路径;之前对接到旧路径的,请按下表改 URL:

接口 旧路径(已废弃) 新路径(以此为准)
§2.1 配房候选源 GET /v3/admin/house/assignments/candidates?requirementId=X GET /v3/admin/order/hotel-requirements/{rid}/candidates (rid 走 PathVariable)
§2.2 提交配房 POST /v3/admin/house/assignments(rid 在 body) POST /v3/admin/order/hotel-requirements/{rid}/assignments(rid 走 PathVariable;body 不再传 requirementId)
§2.3 修改配房 PUT /v3/admin/house/assignments/{id} PUT /v3/admin/order/assignments/{id}
§2.4 删除配房 DELETE /v3/admin/house/assignments/{id} DELETE /v3/admin/order/assignments/{id}
§2.5 房间分配 POST /v3/admin/house/assignments/{id}/rooms(POST 写入) GET /v3/admin/order/orders/{orderId}/rooms(HTTP 方法 + 路径 + 入参形态全改 — GET 查询语义,按家庭分组返结果)
§3.3 询房历史 GET /v3/admin/order/inquiry/by-order GET /v3/admin/order/inquiry?orderId=X
§3.6 加急 POST /v3/admin/order/inquiry/{id}/urgent POST /v3/admin/order/inquiry/{id}/escalate

§2.5 GET 新 VO OrderRoomsRespVO:

{
  "orderId": "string",
  "families": [
    {
      "familyNo": "F1",
      "travelers": [{ "travelerId": "string", "name": "张三", "phoneMasked": "138****5612" }],
      "days": [{ "dayNumber": 1, "rooms": [{ "hotelName": "...", "roomTypeName": "..." }] }]
    }
  ]
}

一、背景

dev-v3 近 3 天(2026-05-18~21)合并 30+ PR / 786 文件 / +74,352 行(出行人 + 大交通 + HOUSE H01-H10 + FIX A-H + 通知中心 internal),全模块工作流 review 检出 10 P0 + 36 P1。本批 4 张 P0/P1 工单(#2821-2824)+ 1 张 hotfix(#2840 Flyway 修)对应 4 张 PR + 1 张 hotfix 全部测试服部署 + Flyway 落库 + admin token round-trip 验证通过。


二、变更接口清单

# 接口 方法 路径 变更类型 说明
1 配房候选源 GET /v3/admin/order/hotel-requirements/{rid}/candidates 路径迁移 /v3/admin/house/assignments/candidates 废弃
2 提交配房 POST /v3/admin/order/hotel-requirements/{rid}/assignments 路径迁移 rid 改 PathVariable,body 删 requirementId
3 修改配房 PUT /v3/admin/order/assignments/{id} 路径迁移
4 删除配房 DELETE /v3/admin/order/assignments/{id} 路径迁移
5 房间分配 GET(原 POST) /v3/admin/order/orders/{orderId}/rooms 方法+路径全改+新 VO 改为查询语义,按家庭分组聚合
6 询房历史 GET /v3/admin/order/inquiry?orderId=X 路径迁移 /by-order 后缀去掉
7 询房加急 POST /v3/admin/order/inquiry/{id}/escalate 路径迁移 /urgent/escalate
8 换酒店提交 POST /v3/admin/order/swap-hotel/commit 权限校验补全 越权返 808402(详 §三-1)
9 大交通 VO 字段类型 - TransportPlanVO.id / orderId / travelers[].id 响应字段类型 Long → String 防 JS 精度丢失
10 出行人 internal Feign GET /v3/internal/traveler/list-by-order/{orderId} 返回字段补值 transportPlanIds 不再永空,合同/保险拿到真大交通批次
11 出行人错误码 - 多接口 错误码段位修正 见 §三-3
12 大交通 batchReplace POST /v3/admin/order/{id}/transport-plan/batch-replace 加幂等 + 分布式锁 防重复提交触发全量替换

三、接口详情

1. 换酒店模块 (PR #2834)

权限校验补齐(原 TODO)

之前 POST /v3/admin/order/swap-hotel/commit 没校验"当前用户是订单 assignee" — 任何房务 token 都能改别人的订单。已修复,跨用户越权返 808402

HTTP/1.1 200 OK
{ "code": 808402, "message": "当前用户必须为订单 assignee 才能操作", "success": false }

状态机审计正确性

之前 swap 业务的状态机 fire 写死 from=CLAIMING,审计日志失真。现根据 house_todo 表 OPEN SWAP_HOTEL/REFUND 待办推导真实 from(EXCEPTIONCLAIMING)。前端 UI 不直接感知,但订单操作日志看 from 字段会更准确

DRIVER 通知补发(原漏发,业务 BUG)

API-SPEC-HOUSE §5.3 列了 4 个 receiver_type(OLD_HOTEL / NEW_HOTEL / DRIVER / ORDER_CUSTOMER),之前代码只发 3 个,司机收不到换酒店通知。本 PR 补 DRIVER。

⚠️ DRIVER 实际企微推送需 FLEET vehicle_plan 反查 Feign(留尾,后续工单接通),当前发送链路 = 事件落库 + dispatcher noop 占位(不抛错不阻塞)。

新增错误码(API-SPEC-HOUSE §5.3 / §11.6 已同步)

错误码 说明
808404 旧酒店 ID 与新酒店 ID 相同
808405 仅 PROCESSING / EXCEPTION 状态可换酒店
808406 换酒店写库失败,请重试
808407 新酒店库存不足

2. 大交通 — Long 字段类型变化 (PR #2836)

TransportPlanVO 中以下三个字段以前响应是 JSON Number(可能精度丢失),现统一返字符串:

VO 字段 旧类型 新类型 示例
TransportPlanVO.id number string "80012345"
TransportPlanVO.orderId number string "30099887"
TransportPlanVO.travelers[].id number string "40055001"

前端检查:Number(id) / parseInt(id) 这类用法需改;直接 id 字符串传回后端 / 当 key 用没影响。


3. 出行人错误码段位修正 (PR #2836)

docs/order-v3/api/API-SPEC-V5.54.html 错误码表 5 处更新(以代码为准):

章节 旧码 新码
§2.1 列表 581100 581102
§2.2 批量编辑 9 行错误码表 581100-581124 581101-581105 / 581110-581114 / 581111 / 581119
§2.3 单个新增 581100581102;补 581115/581116/581118
§2.4 删除 581119→581106 / 581120→581107 / 581100→581102
§2.8 智能解析 581120-581123 581131-581134
§2.9 校验 581124 581102

前端如做了 i18n 映射,请按新码更新 — 否则会命中默认文案。


4. 出行人 internal Feign transportPlanIds 真实化 (PR #2836)

GET /v3/internal/traveler/list-by-order/{orderId} 之前 transportPlanIds 字段硬编码空数组,合同/保险服务跨服务调用永远拿不到出行人绑定的大交通批次 ID。本 PR 修复,字段返真实值。前端不直接调 internal,影响合同/保险出参的"出行人.transportPlanIds"字段


5. 大交通 batchReplace 并发保护 (PR #2836)

POST /v3/admin/order/{id}/transport-plan/batch-replace 全量替换接口加 @Idempotent(3s)+ @Lock4j(30s)— 短时间重复提交会拒绝,前端无需改但可减少重复提交风险。


6. 通知中心 internal 套件规范(后端内部) (PR #2835)

/internal/notification/dispatch / /publish 加幂等 + dispatch 返回类型从 void 改 DispatchResult { success, channelsTriggered, errorMessage }前端不调 internal,无影响


7. order_todo 唯一索引 (PR #2836 / hotfix #2840)

DB 加 (order_id, todo_type, sequence, deleted_marker) 唯一索引,防并发触发重复紧急待办。前端无感。

hotfix #2840:V20260521_004 generated column 用 UNIX_TIMESTAMP 触发 MySQL 8 ERROR 3763 disallowed function,已改 COALESCE(deleted_at, '1970-01-01')(deterministic)。


四、测试服验证状态

服务 部署 commit uptime Flyway admin round-trip
hl-user-service dev-v3 含 #2834/#2835 已重启 V20260521_007 success=1 17:49
hl-order-service-v3 dev-v3 含 #2833/#2836/#2840 18:12 重启 V20260521_004 success=1 18:12 §3.3 / §3.6 / §2.5 / §2.1 全 200/合理 400

唯一索引 uk_todo_order_type_seq_active 已在 hl_order_service_v3.order_todo 表生效。


五、留尾(后续 v3 工单)

  • HOUSE-SWAP DRIVER 通知 wework 真值切换 → 需 FLEET vehicle_plan 反查 Feign 工单
  • HOUSE-FIX-A 候选源数据真实化(loadProductPool)→ 需 H04 完整接通 ProductV2FeignClient
  • HouseInventoryCheckedEvent 消费方(H09 MQ 桥接 PR)
  • TravelerErrorCode 段位整体迁移代码常量(大版本可决议)
  • operationLogMapper 收敛HotelOperationLogService(待该 Service 出现)

六、关联

  • 工单: #2821 / #2822 / #2823 / #2824(全部 closed)
  • PR: #2833 / #2834 / #2835 / #2836 / #2840(全部 merged into dev-v3)
  • Review 来源: Claude /@cr 7 个 agent 并发对照 docs/order-v3/ SRS+API+DB+Detail