文件
hl-api-changelog/changelogs-v2/2026-09/24_8269_团期确认后锁定配置各写口收紧到配置阶段-修改接口-管理后台.md
T
jw和Claude Opus 5.5 bfc1a3210b
changelog-filename-gate / validate (push) Failing after 1s
changelog: #8268 团期人工确认 / #8269 确认后锁定配置 / #8271 六节点展示
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 10:04:14 +08:00

54 KiB
原始文件 Blame 文件历史

schema, ticket, title, consumer, author, change_type, backend_status, gateway_status, frontend_status, frontend_owner, frontend_ref, target_release, verified_at, status_note, updated_at, base
schema ticket title consumer author change_type backend_status gateway_status frontend_status frontend_owner frontend_ref target_release verified_at status_note updated_at base
hl-changelog/v2 8269 团期确认后锁定配置:导游 / 摄影 / 物资、订房计划与分房、需求整体确认 / 打回、正式用车需求保存 / 受控重开 / 免车、房务整团抢单的阶段门收紧到确认之前;抢单池 batchStatus 只接受 RESOURCE_PREPARING admin jw(GIT) 修改接口 deployed verified pending 2026-09-24 六节点定案(SRS §0.27.3 / §0.27.5 #6~#9):团期人工「确认」(进入 MATERIAL_PREPARING,见 #8268)之后四项配置与物资一律不可修改,没有撤销确认。本单把各写口的允许阶段收紧:导游 / 摄影 / 物资由出行前四态(#8231)收回到招募、配置两态,拒绝码仍为 589598,文案改为「团期已确认,配置不可修改」;订房计划新增 / 修改 / 删除 / 按日确认 / 整团确认与分房微调 / 重算只在 RESOURCE_PREPARING 可用(删除另放行已流团),拒绝码 808600 文案补「订房计划仅在配置阶段可改,团期已确认,配置不可修改」;需求整体确认与整团打回、逐单打回两边同步收紧到 RESOURCE_PREPARING(589501);正式用车需求保存收紧到 RESOURCE_PREPARING(589501),受控重开只在 RESOURCE_PREPARING 可用(809111,文案补同一句),免车在 RESOURCE_PREPARING 及出行完毕 / 核单中可用;房务整团抢单池只收 RESOURCE_PREPARING 的团,分页参数 batchStatus 只接受 RESOURCE_PREPARING,其它值 400,整团认领与超管团级接管对确认后的团返 808651。码值、路径、入参出参结构均不变。子订单退单 / 转团 / 加人、满团名额调整、流团不受本单影响。本条取代 23_8231 中「出行前四态可配」的窗口描述。前端需:确认后隐藏或置灰上述写操作入口、按新文案提示、抢单池筛选下拉只保留资源准备中。 2026-09-24 dev-v3

团期资源配置: 团期确认后配置锁定,各写口收紧到确认之前(管理后台)

服务: hl-order-service-v3(端口 8086/8186) PR: #8280 Issue: #8269 日期: 2026-09-24 影响范围: 管理后台团期详情页的配导游 / 配摄影、物资、订房计划与分房、查看需求(整体确认 / 打回)、正式用车需求(保存 / 受控重开 / 免车);房务端整团抢单池


⚠️ 关键变化

  1. 团期「确认」之后,下面所有写口一律拒绝(没有撤销确认)。确认之前(招募 / 配置)可反复改。
  2. #8231 刚放开的「出行前四态都能配导摄物资」被收回:现在只有招募、配置两态能配,MATERIAL_PREPARING / PENDING_DEPARTURE 也被拒。589598 码值不变,文案由「出行后不可再配置导游 / 摄影 / 物资」改为「团期已确认,配置不可修改」,按原文案做过匹配的要改。
  3. 订房计划不再允许返团后按实际入住修正:改前可写到核单中,现在只剩配置阶段;差异改在核单按成本 / 冲正处理。
  4. 需求打回也收紧了:改前整团打回除已流团外全程可用、逐单打回不看团期阶段;现在两者都只在配置阶段可用。
  5. 房务抢单池分页参数 batchStatus 只接受 RESOURCE_PREPARING,传 MATERIAL_PREPARING / PENDING_DEPARTURE / TRAVELLING 返 400。

一、背景

节点 持久态 本单后可写
招募 RECRUITING 仅导游 / 摄影 / 物资(提前配)
配置 RESOURCE_PREPARING 本条全部写口
确认及之后 MATERIAL_PREPARING / PENDING_DEPARTURE / TRAVELLING / TRIP_FINISHED / REVIEWING / SETTLED 一律拒绝(免车在出行完毕 / 核单中例外,见接口 21)
已流团 CANCELLED 一律拒绝(订房计划删除例外,用于释放库存)

不受本单影响:子订单退单 / 转团 / 加人、满团名额调整、流团、订房计划整团批量释放(仅已流团可用,不变)。


二、变更接口清单

# 接口 方法 路径 变更类型 说明
1 保存团期人员配置 PUT /v3/admin/group-batch/{productBatchId}/staff 阶段门收紧 + 文案 四态 → 招募 / 配置;589598 文案改
2 设置报账人等级 PUT /v3/admin/group-batch/{productBatchId}/staff/{staffId}/reporter-rank 阶段门收紧 + 文案 同上
3 新增团期备品行 POST /v3/admin/order/group-batch/{groupBatchId}/supplies 阶段门收紧 + 文案 同上
4 调整团期备品数量 PUT /v3/admin/order/group-batch/supplies/{batchSuppliesId}/quantity 阶段门收紧 + 文案 同上
5 软删团期备品行 DELETE /v3/admin/order/group-batch/supplies/{batchSuppliesId} 阶段门收紧 + 文案 同上
6 整团按日提交订房计划 POST /v3/admin/house/group-batches/{groupBatchId}/room-plans 阶段门收紧 + 文案 六态 → 仅配置;808600 文案改
7 修改单条订房计划 PUT /v3/admin/house/group-batches/{groupBatchId}/room-plans/{planId} 阶段门收紧 + 文案 同上
8 删除单条订房计划 DELETE /v3/admin/house/group-batches/{groupBatchId}/room-plans/{planId} 阶段门收紧 + 文案 仅配置 + 已流团
9 按日确认订房 POST /v3/admin/house/group-batches/{groupBatchId}/room-plans/days/{stayDate}/confirm 阶段门收紧 + 文案 仅配置
10 整团确认订房 POST /v3/admin/house/group-batches/{groupBatchId}/room-plans/confirm 阶段门收紧 + 文案 仅配置
11 订房确认预检 GET /v3/admin/house/group-batches/{groupBatchId}/room-plans/confirm-check 出参取值变化 stageAllowed 仅配置为 true
12 人工微调分房 POST /v3/admin/house/group-batches/{groupBatchId}/allocations 阶段门收紧 + 文案 仅配置
13 重算分房 POST /v3/admin/house/group-batches/{groupBatchId}/allocations/rebuild 阶段门收紧 + 文案 仅配置
14 整体确认需求缺失预检 GET /v3/admin/order/group-batch/{groupBatchId}/requirement/confirm-check 出参取值变化 ready 仅配置可能为 true
15 整体确认需求 POST /v3/admin/order/group-batch/{groupBatchId}/requirement/confirm 阶段门收紧 四态 → 仅配置(589501)
16 按户打回需求(整团入口) POST /v3/admin/order/group-batch/{groupBatchId}/requirement/reject 阶段门收紧 除已流团外全程 → 仅配置(589501)
17 团期管理员打回住宿需求(逐单) POST /v3/admin/order/{id}/hotel-requirement/reject 新增阶段门 仅配置(589501)
18 团期管理员打回用车需求(逐单) POST /v3/admin/order/{id}/vehicle-requirement/reject 新增阶段门 仅配置(589501)
19 保存团期正式用车需求 PUT /v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement 阶段门收紧 四态 → 仅配置(589501)
20 受控重开正式用车需求 POST /v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement/reopen 阶段门收紧 + 文案 三态 → 仅配置;809111 文案改
21 声明整团无需用车 POST /v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement/waive 阶段门收紧 去掉物料准备中 / 待出发 / 出行中
22 团期抢单池列表 GET /v3/admin/order/grab-pool/group-batches 入参取值收窄 + 出参行集合变化 batchStatus 只接受 RESOURCE_PREPARING;池内只剩配置阶段的团
23 整团认领 POST /v3/admin/order/grab-pool/group-batches/{groupBatchId}/claim 阶段门收紧 确认后的团 808651
24 团级接管(超管) POST /v3/admin/order/grab-pool/group-batches/{groupBatchId}/takeover 阶段门收紧 确认后的团 808651

路径、HTTP 方法、权限码、入参结构、成功响应结构均不变;网关无改动。


三、接口详情

1. 保存团期人员配置 PUT /v3/admin/group-batch/{productBatchId}/staff

VO: BatchStaffConfigReqVO → BatchStaffConfigRespVO

使用场景

团期详情页「配导游 / 配摄影」弹窗保存(整期全量覆盖,可按 scopeRoles 限定角色范围)。

入参

字段 位置 类型 必填 约束 说明
productBatchId Path Long ✅ 产品侧排期 ID 未建团返 589553(不变)
scopeRoles Body List<String> 否 元素非空 限定覆盖的角色范围(不变)
staffList Body List 否 null 按空列表 传空列表 = 清空覆盖范围内配置(不变)
staffList[].staffId Body Long ✅ 须命中候选人员 不变
staffList[].staffRole Body String ✅ 须与人员类型相符 不变

出参

字段 类型 说明
productBatchId Long 不变
groupBatchId Long 不变
staffList List 保存后的整期最终状态(不变)
affectedOrderCount Integer 不变

请求示例

{ "staffList": [ { "staffId": 1002, "staffRole": "GUIDE", "sortOrder": 0 } ] }

响应示例

{
  "code": 200,
  "message": "成功",
  "data": { "productBatchId": "2097250420299530242", "groupBatchId": "2097250563497385985", "affectedOrderCount": 0, "staffList": [ { "staffId": 1002, "staffRole": "GUIDE" } ] },
  "success": true
}

空数据 / 降级响应

staffList 传空列表即清空,返回 200、staffList 为空数组(不变)。

{ "code": 200, "data": { "staffList": [], "affectedOrderCount": 0 }, "success": true }

错误响应

{
  "code": 589598,
  "message": "团期已确认,配置不可修改",
  "success": false,
  "data": null
}

业务边界

  • 允许:RECRUITING、RESOURCE_PREPARING;其余(含 MATERIAL_PREPARING、PENDING_DEPARTURE、CANCELLED)589598,被拒时零写入。
  • 未建团仍返 589553,与 589598 不可合并。

2. 设置报账人等级 PUT /v3/admin/group-batch/{productBatchId}/staff/{staffId}/reporter-rank

VO: ReporterRank(枚举入参)→ Result<Void>

使用场景

团期人员名单里标主报账人 / 协助报账人,与保存口同窗口。

入参

字段 位置 类型 必填 约束 说明
productBatchId Path Long ✅ - 不变
staffId Path Long ✅ 须命中已配人员 不变
rank Body String ✅ PRIMARY / ASSIST / NONE 不变

出参

字段 类型 说明
data Void 成功返回 null

请求示例

{ "rank": "PRIMARY" }

响应示例

{ "code": 200, "message": "成功", "data": null, "success": true }

空数据 / 降级响应

无列表出参,无空数据形态。

{ "code": 200, "data": null, "success": true }

错误响应

{
  "code": 589598,
  "message": "团期已确认,配置不可修改",
  "success": false,
  "data": null
}

业务边界

  • 窗口与保存口完全一致:招募、配置两态。
  • 被拒时零写入。

3. 新增团期备品行 POST /v3/admin/order/group-batch/{groupBatchId}/supplies

VO: AddSuppliesReqVO → Result<Long>

使用场景

「物资」页签手工录入一行备品。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ 团期主键 不变
suppliesName Body String 否 纯手填时必填 不变
suppliesResourceId Body Long 否 - 不变
quantity Body Integer ✅ ≥ 1 不变

出参

字段 类型 说明
data Long 新建备品行 ID(不变)

请求示例

{ "suppliesName": "雨衣", "quantity": 1, "sortOrder": 999 }

响应示例

{ "code": 200, "message": "成功", "data": "2102611411027066881", "success": true }

空数据 / 降级响应

写接口,无空数据形态;创单时系统固化产品备品的路径不过本门(不变)。

{ "code": 200, "data": "2102611411027066881", "success": true }

错误响应

{
  "code": 589598,
  "message": "团期已确认,配置不可修改",
  "success": false,
  "data": null
}

业务边界

  • 允许:RECRUITING、RESOURCE_PREPARING;其余 589598,不落库。
  • 确认物资之后、团期确认之前仍可增删改(确认物资不锁物资清单,团期确认才锁)。

4. 调整团期备品数量 PUT /v3/admin/order/group-batch/supplies/{batchSuppliesId}/quantity

VO: AdjustSuppliesQuantityReqVO → Result<Void>

使用场景

「物资」页签行内改数量。

入参

字段 位置 类型 必填 约束 说明
batchSuppliesId Path Long ✅ 须命中活跃备品行 不变
quantity Body Integer ✅ ≥ 1 不变

出参

字段 类型 说明
data Void 成功返回 null

请求示例

{ "quantity": 5 }

响应示例

{ "code": 200, "message": "成功", "data": null, "success": true }

空数据 / 降级响应

无列表出参;备品行已软删返 589521(不变)。

{ "code": 200, "data": null, "success": true }

错误响应

{
  "code": 589598,
  "message": "团期已确认,配置不可修改",
  "success": false,
  "data": null
}

业务边界

  • 阶段门按备品行所属团期判定,窗口同新增口。
  • 被拒时数量不变。

5. 软删团期备品行 DELETE /v3/admin/order/group-batch/supplies/{batchSuppliesId}

VO: Result<Void>(无请求体)

使用场景

「物资」页签删除一行备品。

入参

字段 位置 类型 必填 约束 说明
batchSuppliesId Path Long ✅ 须命中活跃备品行 不变

出参

字段 类型 说明
data Void 成功返回 null

请求示例

DELETE /v3/admin/order/group-batch/supplies/2102611411027066881 HTTP/1.1
Host: api.test.1814.love:9443
Authorization: Bearer <admin token>

响应示例

{ "code": 200, "message": "成功", "data": null, "success": true }

空数据 / 降级响应

对已软删的行再调返 589521(不变)。

{ "code": 200, "data": null, "success": true }

错误响应

{
  "code": 589598,
  "message": "团期已确认,配置不可修改",
  "success": false,
  "data": null
}

业务边界

  • 窗口同新增口;被拒时该行不被软删。

6. 整团按日提交订房计划 POST /v3/admin/house/group-batches/{groupBatchId}/room-plans

VO: GroupBatchRoomPlanSaveReqVO → List<GroupBatchRoomPlanRespVO>

使用场景

房务在团期订房页按日录入订房行(追加式)。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ 团期主键 不变
items Body List ✅ 1~200 行 订房行(不变)
items[].stayDate Body LocalDate ✅ 落在团期区间内 不变
items[].hotelId Body Long ✅ - 不变
items[].roomTypeId Body Long ✅ - 不变
items[].roomCount Body Integer ✅ ≥ 1 不变

其余行字段(roomCategory / protoPrice / settlementPrice / settleType / deductInventory / remark)不变。

出参

字段 类型 说明
[].planId Long 计划行 ID(不变)
[].planStatus String PENDING / CONFIRMED(不变)
[].version Integer 乐观锁版本(不变)

其余字段不变。

请求示例

{ "items": [ { "stayDate": "2026-10-01", "hotelId": 200001, "roomTypeId": 300001, "roomCount": 3 } ] }

响应示例

{
  "code": 200,
  "message": "成功",
  "data": [ { "planId": "2103000000000000001", "stayDate": "2026-10-01", "roomCount": 3, "planStatus": "PENDING", "version": 0 } ],
  "success": true
}

空数据 / 降级响应

items 不能为空(400,不变);成功时返回本次新建的行。

{ "code": 200, "data": [], "success": true }

错误响应

{
  "code": 808600,
  "message": "团期当前阶段(MATERIAL_PREPARING)不允许修改订房计划:订房计划仅在配置阶段可改,团期已确认,配置不可修改",
  "success": false,
  "data": null
}

业务边界

  • 允许:仅 RESOURCE_PREPARING。改前 RESOURCE_PREPARING ~ REVIEWING 六态可写。
  • 808600 的 {0} 是团期当前状态码。

7. 修改单条订房计划 PUT /v3/admin/house/group-batches/{groupBatchId}/room-plans/{planId}

VO: GroupBatchRoomPlanItemReqVO → GroupBatchRoomPlanRespVO

使用场景

房务修改一条订房行(关键字段变化即删旧建新)。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ - 不变
planId Path Long ✅ - 不变
version Body Integer ✅ 乐观锁 不变
roomCount Body Integer 否 ≥ 1 不变
replaceReason Body String 否 ≤ 256 原「核单中团期必填」,本次起核单中已不可改,该约束不再触发

出参

字段 类型 说明
planId Long 不变
planStatus String 不变
version Integer 不变
warnings List<String> 不变

请求示例

{ "version": 0, "roomCount": 4 }

响应示例

{ "code": 200, "message": "成功", "data": { "planId": "2103000000000000001", "roomCount": 4, "planStatus": "PENDING", "version": 1, "warnings": [] }, "success": true }

空数据 / 降级响应

无列表出参;warnings 无告警时为空数组(不变)。

{ "code": 200, "data": { "warnings": [] }, "success": true }

错误响应

{
  "code": 808600,
  "message": "团期当前阶段(PENDING_DEPARTURE)不允许修改订房计划:订房计划仅在配置阶段可改,团期已确认,配置不可修改",
  "success": false,
  "data": null
}

业务边界

  • 仅 RESOURCE_PREPARING;返团后按实际入住修正计划不再允许,差异走核单成本 / 冲正。
  • 「已发生的间夜冻结」808690 在修改路径上已不可达(出行后阶段门先拦)。

8. 删除单条订房计划 DELETE /v3/admin/house/group-batches/{groupBatchId}/room-plans/{planId}

VO: GroupBatchRoomPlanDeleteReqVO → GroupBatchRoomPlanDeleteRespVO

使用场景

房务删除一条订房行(软删,归还库存);已流团的团也用它释放库存。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ - 不变
planId Path Long ✅ - 不变
reason Body String 否 ≤ 256 不变

出参

字段 类型 说明
planId Long 不变
releasedLogId Long 不变
warnings List<String> 不变

请求示例

{ "reason": "客人退团,该晚不再需要" }

响应示例

{ "code": 200, "message": "成功", "data": { "planId": "2103000000000000001", "releasedLogId": null, "warnings": [] }, "success": true }

空数据 / 降级响应

从未扣过库存的行 releasedLogId 为 null(不变)。

{ "code": 200, "data": { "releasedLogId": null, "warnings": [] }, "success": true }

错误响应

{
  "code": 808600,
  "message": "团期当前阶段(MATERIAL_PREPARING)不允许修改订房计划:订房计划仅在配置阶段可改,团期已确认,配置不可修改",
  "success": false,
  "data": null
}

业务边界

  • 允许:RESOURCE_PREPARING 与 CANCELLED(已流团释放库存,不变);确认后到核单中均被拒。

9. 按日确认订房 POST /v3/admin/house/group-batches/{groupBatchId}/room-plans/days/{stayDate}/confirm

VO: GroupBatchRoomDayConfirmRespVO

使用场景

房务逐日确认订房(扣库存、分房、回填配房完成标志)。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ - 不变
stayDate Path String ✅ yyyy-MM-dd 不变

出参

字段 类型 说明
confirmedPlanIds List<Long> 不变
skippedPlanIds List<Long> 不变
hotelReady Boolean 不变
warnings List 不变

请求示例

POST /v3/admin/house/group-batches/2097250563497385985/room-plans/days/2026-10-01/confirm HTTP/1.1
Host: api.test.1814.love:9443
Authorization: Bearer <admin token>

响应示例

{ "code": 200, "message": "成功", "data": { "groupBatchId": "2097250563497385985", "stayDate": "2026-10-01", "confirmedPlanIds": ["2103000000000000001"], "skippedPlanIds": [], "hotelReady": false, "warnings": [] }, "success": true }

空数据 / 降级响应

该日已全部确认时幂等返回,confirmedPlanIds 为空、skippedPlanIds 列出已确认行(不变)。

{ "code": 200, "data": { "confirmedPlanIds": [], "skippedPlanIds": ["2103000000000000001"] }, "success": true }

错误响应

{
  "code": 808600,
  "message": "团期当前阶段(MATERIAL_PREPARING)不允许修改订房计划:订房计划仅在配置阶段可改,团期已确认,配置不可修改",
  "success": false,
  "data": null
}

业务边界

  • 仅 RESOURCE_PREPARING;与「可写」同一集合,不会出现「能改却确认不了」。

10. 整团确认订房 POST /v3/admin/house/group-batches/{groupBatchId}/room-plans/confirm

VO: GroupBatchRoomConfirmAllRespVO

使用场景

房务一键整团确认订房(先整团预检,再逐日确认)。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ - 不变

出参

字段 类型 说明
confirmedDates List<String> 不变
skippedDates List<String> 不变
emptyDemand Boolean 不变
hotelReady Boolean 不变

请求示例

POST /v3/admin/house/group-batches/2097250563497385985/room-plans/confirm HTTP/1.1
Host: api.test.1814.love:9443
Authorization: Bearer <admin token>

响应示例

{ "code": 200, "message": "成功", "data": { "groupBatchId": "2097250563497385985", "confirmedDates": ["2026-10-01", "2026-10-02"], "skippedDates": [], "emptyDemand": false, "hotelReady": true, "warnings": [] }, "success": true }

空数据 / 降级响应

全团无需订房时直接置配房完成并返回 emptyDemand=true(不变)。

{ "code": 200, "data": { "confirmedDates": [], "emptyDemand": true, "hotelReady": true }, "success": true }

错误响应

{
  "code": 808600,
  "message": "团期当前阶段(MATERIAL_PREPARING)不允许修改订房计划:订房计划仅在配置阶段可改,团期已确认,配置不可修改",
  "success": false,
  "data": null
}

业务边界

  • 仅 RESOURCE_PREPARING;阶段门在整团预检第一步,被拒时零写入。

11. 订房确认预检 GET /v3/admin/house/group-batches/{groupBatchId}/room-plans/confirm-check

VO: GroupBatchRoomConfirmCheckReqVO → GroupBatchRoomConfirmCheckRespVO

使用场景

订房页「确认」按钮前的只读预检。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ - 不变
stayDate Query LocalDate 否 - 不传返回全部相关日(不变)

出参

字段 类型 说明
stageAllowed Boolean 取值改变:仅 RESOURCE_PREPARING 为 true(改前资源准备中 ~ 核单中为 true)
ready Boolean 整团是否可确认(含 stageAllowed,随之变化)
batchStatus String 不变
days List 不变

请求示例

GET /v3/admin/house/group-batches/2097250563497385985/room-plans/confirm-check HTTP/1.1
Host: api.test.1814.love:9443
Authorization: Bearer <admin token>

无请求体。

响应示例

{ "code": 200, "message": "成功", "data": { "groupBatchId": "2097250563497385985", "batchStatus": "MATERIAL_PREPARING", "stageAllowed": false, "ready": false, "days": [] }, "success": true }

空数据 / 降级响应

无计划行时 days 为空数组(不变)。

{ "code": 200, "data": { "stageAllowed": true, "ready": false, "days": [] }, "success": true }

错误响应

{
  "code": 589500,
  "message": "团期不存在",
  "success": false,
  "data": null
}

业务边界

  • 只读零副作用;确认后打开订房页,stageAllowed=false 可直接用来置灰确认按钮。

12. 人工微调分房 POST /v3/admin/house/group-batches/{groupBatchId}/allocations

VO: GroupBatchRoomAllocationSaveReqVO → GroupBatchRoomAllocationRebuildRespVO

使用场景

房务在分房页手工调整某户落在哪条计划行。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ - 不变
items Body List 否 ≤ 500 行;与 clearPlanIds 至少一个非空 不变
clearPlanIds Body List<Long> 否 ≤ 200 条 不变

出参

字段 类型 说明
balanced Boolean 不变
hotelReady Boolean 不变
days List 不变
warnings List 不变

请求示例

{ "items": [], "clearPlanIds": ["2103000000000000001"] }

响应示例

{ "code": 200, "message": "成功", "data": { "groupBatchId": "2097250563497385985", "force": false, "balanced": true, "hotelReady": true, "days": [], "warnings": [] }, "success": true }

空数据 / 降级响应

days / warnings 无内容时为空数组(不变)。

{ "code": 200, "data": { "days": [], "warnings": [] }, "success": true }

错误响应

{
  "code": 808600,
  "message": "团期当前阶段(MATERIAL_PREPARING)不允许修改订房计划:订房计划仅在配置阶段可改,团期已确认,配置不可修改",
  "success": false,
  "data": null
}

业务边界

  • 仅 RESOURCE_PREPARING;改前资源准备中 ~ 核单中可用。

13. 重算分房 POST /v3/admin/house/group-batches/{groupBatchId}/allocations/rebuild

VO: GroupBatchRoomAllocationRebuildReqVO → GroupBatchRoomAllocationRebuildRespVO

使用场景

房务按当前需求基线重算分房。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ - 不变
force Body Boolean 否 默认 false 不变
stayDate Body LocalDate 否 - 不传 = 全部已确认日(不变)
reason Body String 否 force=true 时必填 不变

出参

字段 类型 说明
balanced Boolean 不变
hotelReady Boolean 不变
days / skippedDays List 不变

请求示例

{ "force": false, "stayDate": "2026-10-01" }

响应示例

{ "code": 200, "message": "成功", "data": { "groupBatchId": "2097250563497385985", "force": false, "balanced": true, "hotelReady": true, "days": [], "skippedDays": [] }, "success": true }

空数据 / 降级响应

未确认的日进 skippedDays(不变)。

{ "code": 200, "data": { "days": [], "skippedDays": [ { "stayDate": "2026-10-02", "reason": "PLAN_NOT_CONFIRMED" } ] }, "success": true }

错误响应

{
  "code": 808600,
  "message": "团期当前阶段(MATERIAL_PREPARING)不允许修改订房计划:订房计划仅在配置阶段可改,团期已确认,配置不可修改",
  "success": false,
  "data": null
}

业务边界

  • 仅 RESOURCE_PREPARING。

14. 整体确认需求缺失预检 GET /v3/admin/order/group-batch/{groupBatchId}/requirement/confirm-check

VO: GroupBatchRequirementCheckRespVO

使用场景

「查看需求」页整体确认按钮前的只读预检。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ - 不变

出参

字段 类型 说明
ready Boolean 取值改变:阶段条件由「资源准备中 / 物料准备中 / 待出发 / 出行中」收紧为仅 RESOURCE_PREPARING
batchStatus / batchStatusName String 不变
missing / vehicleMissing List 不变

请求示例

GET /v3/admin/order/group-batch/2097250563497385985/requirement/confirm-check HTTP/1.1
Host: api.test.1814.love:9443
Authorization: Bearer <admin token>

无请求体。

响应示例

{ "code": 200, "message": "成功", "data": { "groupBatchId": "2097250563497385985", "batchStatus": "MATERIAL_PREPARING", "batchStatusName": "物料准备中", "ready": false, "missing": [], "vehicleMissing": [] }, "success": true }

空数据 / 降级响应

无缺失时两个缺失清单为空数组(不变)。

{ "code": 200, "data": { "ready": true, "missing": [], "vehicleMissing": [] }, "success": true }

错误响应

{
  "code": 589500,
  "message": "团期不存在",
  "success": false,
  "data": null
}

业务边界

  • 缺失清单为空但 ready=false,说明卡在团期阶段;确认后打开该页恒为 false。

15. 整体确认需求 POST /v3/admin/order/group-batch/{groupBatchId}/requirement/confirm

VO: GroupBatchRequirementConfirmRespVO

使用场景

团期管理员整体确认需求、放行房务 / 车务。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ - 不变

出参

字段 类型 说明
requirementConfirmed Boolean 不变
dispatchedOrderIds / skippedOrderIds List<Long> 不变
groupVehicleRequirementStatus String 不变

请求示例

POST /v3/admin/order/group-batch/2097250563497385985/requirement/confirm HTTP/1.1
Host: api.test.1814.love:9443
Authorization: Bearer <admin token>

响应示例

{ "code": 200, "message": "成功", "data": { "groupBatchId": "2097250563497385985", "requirementConfirmed": true, "dispatchedOrderIds": ["60123456789001"], "skippedOrderIds": [], "dispatchedCount": 1 }, "success": true }

空数据 / 降级响应

无可放行户时 dispatchedOrderIds 为空数组(不变)。

{ "code": 200, "data": { "requirementConfirmed": true, "dispatchedOrderIds": [], "dispatchedCount": 0 }, "success": true }

错误响应

{
  "code": 589501,
  "message": "团期状态不允许当前操作",
  "success": false,
  "data": null
}

业务边界

  • 仅 RESOURCE_PREPARING;改前物料准备中 / 待出发 / 出行中也可重新确认,现在一律 589501。
  • 与打回(接口 16~18)同步收紧,不会出现「能打回却确认不了」。

16. 按户打回需求(整团入口) POST /v3/admin/order/group-batch/{groupBatchId}/requirement/reject

VO: RejectRequirementReqVO → GroupBatchRequirementRejectRespVO

使用场景

「查看需求」页勾选多户打回给定制师重提。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ - 不变
orderIds Body List<Long> ✅ 1~200 户 不变
reason Body String ✅ ≤ 500 字 不变
resourceType Body String 否 HOTEL / VEHICLE / ALL,默认 ALL 不变

出参

字段 类型 说明
requirementConfirmed Boolean 成功后恒 false(不变)
rejected[] List 每户每资源类型一条(不变)

请求示例

{ "orderIds": ["60123456789001"], "reason": "房型数量与人数不符,请重报", "resourceType": "HOTEL" }

响应示例

{ "code": 200, "message": "成功", "data": { "groupBatchId": "2097250563497385985", "requirementConfirmed": false, "rejected": [ { "orderId": "60123456789001", "resourceType": "HOTEL", "requirementId": "90011223344", "sourceStatus": "PENDING_REVIEW" } ] }, "success": true }

空数据 / 降级响应

所选户均无可打回的需求时 rejected 为空数组(不变)。

{ "code": 200, "data": { "requirementConfirmed": false, "rejected": [] }, "success": true }

错误响应

{
  "code": 589501,
  "message": "团期状态不允许当前操作",
  "success": false,
  "data": null
}

业务边界

  • 仅 RESOURCE_PREPARING。改前除已流团外全程可用(含招募中),招募中现在也被拒。

17. 团期管理员打回住宿需求(逐单) POST /v3/admin/order/{id}/hotel-requirement/reject

VO: RejectReqVO → Result<Void>

使用场景

逐户需求详情里单独打回住宿需求。

入参

字段 位置 类型 必填 约束 说明
id Path Long ✅ 子订单 ID 不变
returnRemark Body String ✅ ≤ 500 字 不变

出参

字段 类型 说明
data Void 成功返回 null

请求示例

{ "returnRemark": "第二晚缺房型,请补充" }

响应示例

{ "code": 200, "message": "成功", "data": null, "success": true }

空数据 / 降级响应

无列表出参。

{ "code": 200, "data": null, "success": true }

错误响应

所属团期不在 RESOURCE_PREPARING:

{
  "code": 589501,
  "message": "团期状态不允许当前操作",
  "success": false,
  "data": null
}

业务边界

  • 新增阶段门:改前逐单打回不看团期阶段;现在仅 RESOURCE_PREPARING。
  • 非团期订单仍返 582083(不变)。

18. 团期管理员打回用车需求(逐单) POST /v3/admin/order/{id}/vehicle-requirement/reject

VO: RejectReqVO → Result<Void>

使用场景

逐户需求详情里单独打回行程用车或接送机需求。

入参

字段 位置 类型 必填 约束 说明
id Path Long ✅ 子订单 ID 不变
kind Query String 否 TRAVEL / TRANSFER,默认 TRAVEL 不变
returnRemark Body String ✅ ≤ 500 字 不变

出参

字段 类型 说明
data Void 成功返回 null

请求示例

{ "returnRemark": "用车人数与报名人数不符" }

响应示例

{ "code": 200, "message": "成功", "data": null, "success": true }

空数据 / 降级响应

无列表出参。

{ "code": 200, "data": null, "success": true }

错误响应

{
  "code": 589501,
  "message": "团期状态不允许当前操作",
  "success": false,
  "data": null
}

业务边界

  • 新增阶段门:仅 RESOURCE_PREPARING;非团期订单仍返 582083。

19. 保存团期正式用车需求 PUT /v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement

VO: GroupVehicleRequirementSaveReqVO → GroupVehicleRequirementRespVO

使用场景

团期管理员编辑整团乘车分组(全量替换)。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ - 不变
version Body Integer 否 首次保存传 null 不变
remark Body String 否 ≤ 500 字 不变
groups Body List ✅ 不能为 null 不变

出参

字段 类型 说明
requirementId Long 不变
status String 不变
version Integer 不变
groups List 不变

请求示例

{ "version": 3, "groups": [ { "groupCode": "BUS", "vehicleType": "BUS", "serviceStartDate": "2026-10-01", "serviceEndDate": "2026-10-03", "seats": 35, "count": 1, "days": [ { "tripDate": "2026-10-01", "headcount": 30, "memberOrderIds": ["60123456789001"] } ] } ] }

响应示例

{ "code": 200, "message": "成功", "data": { "requirementId": "1867000000101", "groupBatchId": "2097250563497385985", "status": "DRAFT", "version": 4, "groups": [] }, "success": true }

空数据 / 降级响应

整团免车请走 waive,本接口 groups 为 null 返 400(不变)。

{ "code": 200, "data": { "status": "DRAFT", "groups": [] }, "success": true }

错误响应

{
  "code": 589501,
  "message": "团期状态不允许当前操作",
  "success": false,
  "data": null
}

业务边界

  • 仅 RESOURCE_PREPARING;改前资源准备中 / 物料准备中 / 待出发 / 出行中可用。

20. 受控重开正式用车需求 POST /v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement/reopen

VO: GroupVehicleRequirementReopenReqVO → GroupVehicleReopenRespVO

使用场景

把已被车务执行的正式用车需求退回可改(带令牌、范围、有效期的窗口)。本次起只在配置阶段可用,是配置阶段内把已完成的用车需求改回的唯一出口。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ - 不变
reason Body String ✅ ≤ 200 不变
scopeGroupCodes Body List<String> ✅ 1~20 个 不变
scopeDates Body List<LocalDate> ✅ 1~60 天 不变
windowMinutes Body Integer 否 10~1440,默认 120 不变

出参

字段 类型 说明
requirementId Long 不变
requirementStatus String 不变
windowToken String 不变
expiresAt LocalDateTime 不变
blockedStage String 本次起恒为 RESOURCE_PREPARING

请求示例

{ "reason": "客户临时增加 2 人,需要加一辆车", "scopeGroupCodes": ["BUS"], "scopeDates": ["2026-10-01"], "windowMinutes": 120 }

响应示例

{ "code": 200, "message": "成功", "data": { "requirementId": "1934567890123456789", "requirementVersion": 3, "requirementStatus": "PENDING_RECONFIRM", "windowToken": "窗口令牌示例", "expiresAt": "2026-09-24 12:00:00", "blockedStage": "RESOURCE_PREPARING", "batchStatus": "RESOURCE_PREPARING" }, "success": true }

空数据 / 降级响应

同一操作人重复开窗幂等返回既有令牌(不变)。

{ "code": 200, "data": { "requirementStatus": "PENDING_RECONFIRM", "windowToken": "窗口令牌示例" }, "success": true }

错误响应

{
  "code": 809111,
  "message": "团期当前状态 MATERIAL_PREPARING 不允许编辑、确认或重开正式用车需求:仅配置阶段可改,团期已确认,配置不可修改",
  "success": false,
  "data": null
}

业务边界

  • 仅 RESOURCE_PREPARING;改前物料准备中 / 待出发也可重开(#7442 窗口),本次起下线。
  • 809101 / 809203 / 809209 等其余拒绝条件不变。

21. 声明整团无需用车 POST /v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement/waive

VO: GroupVehicleRequirementWaiveReqVO → GroupVehicleRequirementRespVO

使用场景

纯自驾等整团不用车的团声明免车。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ - 不变
reason Body String ✅ ≤ 200 字 不变

出参

字段 类型 说明
status String 不变
groups List 免车态为空数组(不变)

请求示例

{ "reason": "纯自驾团,客户自理交通" }

响应示例

{ "code": 200, "message": "成功", "data": { "requirementId": "1867000000101", "status": "CONFIRMED", "groups": [] }, "success": true }

空数据 / 降级响应

已是免车态时幂等返回(不变)。

{ "code": 200, "data": { "status": "CONFIRMED", "groups": [] }, "success": true }

错误响应

{
  "code": 589501,
  "message": "团期状态不允许当前操作",
  "success": false,
  "data": null
}

业务边界

  • 允许:RESOURCE_PREPARING、TRIP_FINISHED、REVIEWING。改前另含 MATERIAL_PREPARING / PENDING_DEPARTURE / TRAVELLING,本次去掉。
  • 出行完毕 / 核单中仍可补点免车(结算闸需要),不属于「确认后改配置」。
  • 809114 等其余拒绝条件不变。

22. 团期抢单池列表 GET /v3/admin/order/grab-pool/group-batches

VO: HouseGroupGrabPoolPageReqVO → PageResult<HouseGroupGrabPoolItemRespVO>

使用场景

房务端整团抢单池(一团一条)。

入参

字段 位置 类型 必填 约束 说明
batchStatus Query String 否 只接受 RESOURCE_PREPARING 本次收窄:改前接受 RESOURCE_PREPARING / MATERIAL_PREPARING / PENDING_DEPARTURE / TRAVELLING
keyword Query String 否 ≤ 32 字 不变
productId Query Long 否 - 不变
departDateFrom / departDateTo Query LocalDate 否 - 不变
page Query Integer 否 ≥ 1,默认 1 不变
pageSize Query Integer 否 1~100,默认 20 不变

出参

字段 类型 说明
records[].groupBatchId Long 不变
records[].batchStatus String 行集合改变:本次起恒为 RESOURCE_PREPARING
records[].batchStatusLabel String 恒为「资源准备中」
records[].hotelReady Boolean 不变
total Long 不变

请求示例

GET /v3/admin/order/grab-pool/group-batches?batchStatus=RESOURCE_PREPARING&page=1&pageSize=20 HTTP/1.1
Host: api.test.1814.love:9443
Authorization: Bearer <admin token>

无请求体。

响应示例

{ "code": 200, "message": "成功", "data": { "total": 1, "records": [ { "groupBatchId": "2097250563497385985", "batchNo": "GB26100101", "batchStatus": "RESOURCE_PREPARING", "batchStatusLabel": "资源准备中", "hotelReady": false, "urgencyLevel": "NORMAL" } ] }, "success": true }

空数据 / 降级响应

无可认领团期时空页(不变)。

{ "code": 200, "data": { "total": 0, "records": [] }, "success": true }

错误响应

{ "code": 400, "message": "batchStatus 只接受 RESOURCE_PREPARING", "success": false, "data": null }

业务边界

  • 入池条件:未被认领 + 需求已整体确认 + 团期在 RESOURCE_PREPARING;确认后的团不再出现在池里。
  • 不传 batchStatus 即可,前端筛选下拉若保留其它三个值会得到 400。

23. 整团认领 POST /v3/admin/order/grab-pool/group-batches/{groupBatchId}/claim

VO: Result<Void>(无请求体)

使用场景

房务在抢单池点「认领」整团。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ 团期主键 不变

出参

字段 类型 说明
data Void 成功返回 null

请求示例

POST /v3/admin/order/grab-pool/group-batches/2097250563497385985/claim HTTP/1.1
Host: api.test.1814.love:9443
Authorization: Bearer <admin token>

响应示例

{ "code": 200, "message": "成功", "data": null, "success": true }

空数据 / 降级响应

无列表出参。

{ "code": 200, "data": null, "success": true }

错误响应

{
  "code": 808651,
  "message": "该团期当前不可认领(需求未整体确认或团期阶段不允许)",
  "success": false,
  "data": null
}

业务边界

  • 团期阶段须为 RESOURCE_PREPARING;改前物料准备中 / 待出发 / 出行中也可认领。
  • 已被他人认领 / 自己已认领的码不变。

24. 团级接管(超管) POST /v3/admin/order/grab-pool/group-batches/{groupBatchId}/takeover

VO: HouseGroupTakeoverReqVO → HouseGroupTakeoverRespVO

使用场景

超管把某团的房务认领人改派给另一位房务(如原认领人离职)。与整团认领共用同一阶段集合。

入参

字段 位置 类型 必填 约束 说明
groupBatchId Path Long ✅ 团期主键 不变
toUserId Body Long ✅ 须为在职房务 不变
reason Body String ✅ trim 后 10~200 字 不变

出参

字段 类型 说明
groupBatchId Long 不变
fromClaimerId / toClaimerId Long 不变
toClaimerName String 不变
clearedOrderIds / legacyFinalizedOrderIds / skippedOrderIds List<String> 不变

请求示例

{ "toUserId": 30002, "reason": "原认领房务离职,指派新房务接管该团" }

响应示例

{ "code": 200, "message": "成功", "data": { "groupBatchId": "2097250563497385985", "fromClaimerId": "30001", "toClaimerId": "30002", "toClaimerName": "李四", "clearedOrderIds": [], "legacyFinalizedOrderIds": [], "skippedOrderIds": [] }, "success": true }

空数据 / 降级响应

没有需要清理的户级归属时三个列表为空数组(不变)。

{ "code": 200, "data": { "clearedOrderIds": [], "legacyFinalizedOrderIds": [], "skippedOrderIds": [] }, "success": true }

错误响应

{
  "code": 808651,
  "message": "该团期当前不可认领(需求未整体确认或团期阶段不允许)",
  "success": false,
  "data": null
}

业务边界

  • 团期阶段须为 RESOURCE_PREPARING;改前物料准备中 / 待出发 / 出行中也可接管。确认后的团要换房务负责人,本接口不再可用。
  • 非超管、原因过短等其余拒绝码不变。

四、契约约束与正确调用方式

✅ 正确 / ❌ 错误调用对照

场景 结果
✅ 招募中配导游 / 摄影 / 物资 200
✅ 配置中改订房、改用车、打回需求、重开用车 200
❌ 确认后(MATERIAL_PREPARING)保存导摄或改物资 589598「团期已确认,配置不可修改」
❌ 确认后改订房 / 确认订房 / 分房 808600
❌ 确认后整体确认需求、打回需求、保存用车需求 589501
❌ 确认后受控重开用车 809111
❌ 抢单池 batchStatus=MATERIAL_PREPARING 400

文案变化(码值不变)

code 改前 message 改后 message
589598 出行后不可再配置导游 / 摄影 / 物资 团期已确认,配置不可修改
808600 团期当前阶段({0})不允许修改订房计划 团期当前阶段({0})不允许修改订房计划:订房计划仅在配置阶段可改,团期已确认,配置不可修改
809111 团期当前状态 {0} 不允许编辑、确认或重开正式用车需求 团期当前状态 {0} 不允许编辑、确认或重开正式用车需求:仅配置阶段可改,团期已确认,配置不可修改

前端按码值分支即可;按原文案做过匹配的需改。


五、数据库行为

  • 所有接口在阶段门被拒时零写入:阶段门位于任何写库动作之前。
  • 放行时的写入行为与改前完全一致(本单只改允许的阶段集合与拒绝文案),不新增、不删除任何写入。
  • 抢单池与两个预检接口只读。

六、边界行为

  • 未登录 → 401(网关拦截)。
  • 团期不存在 → 589500 / 各域既有「不存在」码(不变)。
  • 已流团:导摄物资 589598、订房计划只允许删除 / 整团释放、需求与用车一律 589501 / 809111。
  • 子订单退单、转团、加人不受本单影响(只锁团期配置,不锁子订单)。
  • 满团名额调整(招募、配置)、流团(招募 ~ 待出发)窗口不变。
  • 核单中订房修改的 808617、出行中的 808690 两道守卫在修改路径上已不可达。

六.6、修改前后对比

字段级对比

字段 改前 改后
抢单池入参 batchStatus 可选值 RESOURCE_PREPARING / MATERIAL_PREPARING / PENDING_DEPARTURE / TRAVELLING 仅 RESOURCE_PREPARING
订房预检 stageAllowed 资源准备中 ~ 核单中为 true 仅资源准备中为 true
需求预检 ready 的阶段条件 资源准备中 / 物料准备中 / 待出发 / 出行中 仅资源准备中
589598 / 808600 / 809111 message 见「四」改前列 见「四」改后列

行为级对比

写口 改前允许 改后允许
导游 / 摄影 / 物资(接口 1~5) 招募 / 配置 / 物料准备中 / 待出发 招募 / 配置
订房计划新增 / 修改 / 按日确认 / 整团确认 / 分房微调 / 重算(接口 6、7、9、10、12、13) 资源准备中 ~ 核单中 资源准备中
订房计划删除(接口 8) 资源准备中 ~ 核单中 + 已流团 资源准备中 + 已流团
需求整体确认(接口 15) 资源准备中 / 物料准备中 / 待出发 / 出行中 资源准备中
整团打回(接口 16) 除已流团外全程 资源准备中
逐单打回(接口 17、18) 不看团期阶段 资源准备中
保存正式用车需求(接口 19) 资源准备中 / 物料准备中 / 待出发 / 出行中 资源准备中
受控重开(接口 20) 资源准备中 / 物料准备中 / 待出发 资源准备中
免车(接口 21) 资源准备中 / 物料准备中 / 待出发 / 出行中 / 出行完毕 / 核单中 资源准备中 / 出行完毕 / 核单中
整团认领 / 团级接管(接口 23、24) 资源准备中 / 物料准备中 / 待出发 / 出行中 资源准备中

六.7、影响评估

  • 是否破坏向后兼容: 是。确认后的写操作全部被拒;抢单池 batchStatus 旧可选值返 400;589598 文案变化。
  • 前端是否必须同步上线: 否(后端拒绝即安全),但建议同步:确认后隐藏或置灰上述入口,否则用户点了才看到报错;抢单池筛选下拉若保留旧选项会触发 400。
  • 前端 workaround 清理点: #8231 交接时物资页签「出行前四态放行」的显隐判据需收回到招募 / 配置两态;按 589598 原文案做匹配的地方改为按码值。

七、不影响范围

  • 仅影响: 上述 24 个接口的允许阶段与 3 个错误码的文案。
  • 零影响:
    • 子订单退单 / 转团 / 加人
    • 满团名额调整、流团、取消成团
    • 订房计划整团批量释放(仅已流团,不变)
    • 各接口的路径、权限码、入参结构、成功响应结构
    • 小程序端

八、测试环境已验证

部署:hl-order-service-v3 = dev-v3 @ d9fdd7fe0 / ade8ac292,经网关 https://api.test.1814.love 真实鉴权实测(2026-09-24 09:28–09:58);工单 #8269 已验收关单。

# 场景 结果
1 招募 / 配置阶段 staff 保存、物资增改删 均 200
2 确认后 staff 修改 / 清空、物资增改删 589598「团期已确认,配置不可修改」,数据回读不变;待出发抽查同样拒绝
3 确认后车务受控重开 / 改正式用车需求 / 免车 809111 / 589501 / 589501,需求读回不变
4 订房计划:配置阶段增改删、整团确认 可用;确认后新增 / 修改 / 删除 / 按日确认 / 整团确认 / 微调均 808600;流团后 release-all 过阶段门
5 需求整体确认 / 批量打回 / 逐单打回 配置阶段可用;确认后均 589501
6 房务抢单池 batchStatus MATERIAL_PREPARING → 400;RESOURCE_PREPARING → 200
7 确认后子订单取消、同班期新下子订单 均 200,团期状态不变

九、相关历史 PR

PR Issue 说明 是否仍有效
#8234 / #8237 #8231 导游 / 摄影 / 物资放开到出行前四态 ❌ 窗口被本单收回到招募 / 配置
— #7442 车务受控重开(物料准备中 / 待出发窗口) ❌ 窗口被本单收回到配置
— #7210 需求整体确认与打回 ⚠️ 阶段集合被本单收紧
— #7324 订房计划可写到核单中(返团后修正) ❌ 本单收回
本 PR #8280 #8269 确认后锁定配置 ✅ 最新

十、相关文档

  • 关联 Issue: wx/HL#8269
  • 关联 PR: wx/HL#8280
  • 被本条取代的窗口描述:changelogs-v2/2026-09/23_8231_配导游配摄影物资放开到出行前四态-修改接口-管理后台.md
  • 同批六节点条目:团期人工确认(#8268)、六节点展示与看板七桶(#8271)

关联 / 联系人

链接

联系人

  • 后端负责人: @jw