Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
54 KiB
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 影响范围: 管理后台团期详情页的配导游 / 配摄影、物资、订房计划与分房、查看需求(整体确认 / 打回)、正式用车需求(保存 / 受控重开 / 免车);房务端整团抢单池
⚠️ 关键变化
- 团期「确认」之后,下面所有写口一律拒绝(没有撤销确认)。确认之前(招募 / 配置)可反复改。
- #8231 刚放开的「出行前四态都能配导摄物资」被收回:现在只有招募、配置两态能配,
MATERIAL_PREPARING/PENDING_DEPARTURE也被拒。589598 码值不变,文案由「出行后不可再配置导游 / 摄影 / 物资」改为「团期已确认,配置不可修改」,按原文案做过匹配的要改。 - 订房计划不再允许返团后按实际入住修正:改前可写到核单中,现在只剩配置阶段;差异改在核单按成本 / 冲正处理。
- 需求打回也收紧了:改前整团打回除已流团外全程可用、逐单打回不看团期阶段;现在两者都只在配置阶段可用。
- 房务抢单池分页参数
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