文件
hl-api-changelog/changelogs-v2/2026-09/27_8408_订单响应补团号-修改接口-管理后台.md
T
API Changelog Bot和Claude Opus 5.5 ec2426eda7
changelog-filename-gate / validate (push) Failing after 1s
docs(changelog): #8408 PR-2 order-v3 管理后台 109 个接口响应补团号 teamNo
- PR #8439(69046568c)+ #8447(97b9754f2)已合 dev-v3 并部署测试环境
- 网关实测:团期户列表 50/50、首页看板 5/5、房务详情 2/2、线下收款首笔登记响应团号与库一致
- 20 个写后出口团号查询降级为 null 已逐个标注;空白团号统一返回 null

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 19:00:23 +08:00

9569 行
248 KiB
Markdown
原始文件 Blame 文件历史

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
---
schema: "hl-changelog/v2"
ticket: "8408"
title: "订单管理后台响应体补团号字段"
consumer: "admin"
author: "wx(GIT)"
change_type: "修改接口"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "pending"
frontend_owner: ""
frontend_ref: ""
target_release: ""
verified_at: "2026-09-27"
status_note: "PR #8439(合并提交 69046568c)与 #8447(合并提交 97b9754f2)已合入 dev-v3,order-v3 已按 97b9754f2 部署测试环境。网关实测:团期户列表 50/50、首页看板 5/5、房务详情 2/2 的 teamNo 与库一致;管理端新建订单后登记首笔线下收款,响应 teamNo 为本次生成的团号,与库一致。其余接口由单测和响应字段门禁 TeamNoResponseFieldGateTest 覆盖,未逐个走网关。"
updated_at: "2026-09-27"
base: "dev-v3"
---
# 订单服务(order-v3): 管理后台响应体批量补团号(teamNo)字段
> **存放目录**:
> - 一期(v2,无 `order-v3` 标签的工单)→ `changelogs/{YYYY-MM}/`
> - 二期(v3,`order-v3` 标签的工单)→ `changelogs-v2/{YYYY-MM}/`
>
> **服务**: hl-order-service-v3 (端口 8083) + hl-user-service(仅出口透传,零改动)
> **PR**: #8439(字段主体) + #8447(线下收款首笔登记响应取写后团号、空白团号归一为 null)
> **Issue**: #8408
> **日期**: 2026-09-27
> **影响范围**: 管理后台(admin) 109 个接口(107 个 order-v3 + 2 个 user-service 工作台出口)的响应体补充只读字段 `teamNo`(团号)
---
## ⚠️ 关键变化 / 一、背景
本工单(#8408)的字段侧按端拆开交付:车务(fleet)侧由 PR #8419 交付(见 `27_8408_车务响应补团号-修改接口-管理后台.md`);小程序(mp)端接口不在本文范围;本文(PR #8439 + #8447)覆盖 order-v3 管理后台侧 107 个接口 + user-service 工作台的 2 个出口(仪表盘「即将出行」列表,字段透传自 order-v3,user-service 本身零改动)。
**本次是纯新增字段的向后兼容改动**:上述 109 个接口的响应体新增只读字段 `teamNo`(团号),不删除、不重命名、不改变类型任何既有字段,不新增任何入参、不改变任何现有校验/错误码/鉴权规则。**前端不改代码也不会报错**——新增消费该字段是可选的。
`teamNo` 语义:
- 格式固定为 `yy-NNNN`(如 `26-0480`),来源于订单主表 `team_no` 列。
- 订单**首次付款入账时生成**:线上支付成功、管理端登记首笔线下收款、订单状态干预推进到已付款,三条路径口径相同。已有团号的订单再次付款(如补尾款)时原样保留,不换号。
- **未付款的订单没有团号**,`teamNo` 为 `null`。团号为空白时同样返回 `null`:不返回空串,也不用订单号顶替。
- 登记首笔线下收款(`POST /v3/admin/order/{orderId}/payment/manual-receipt`)的响应里,`teamNo` 就是本次登记生成的团号,与之后查询订单拿到的一致(#8447)。
- 另有 3 处接口原本就返回 `teamNo`,本次只改了一点:空白团号统一返回 `null`,字段和类型都不变(#8447)。这 3 处不在下方接口清单内:
- 评价列表 `GET /v3/admin/review/list`
- 评价详情 `GET /v3/admin/review/{reviewId}`
- 退款申请分页 `GET /v3/admin/refund/application/page`
- 另外,退款申请详情里 `orderInfo.teamNo` 也按同一口径处理。
- 保险详情有两个入口:`GET .../insurance/orders/{id}`(纯读)走严格查询,团号查失败会直接报错,不返回 `null`;`sync-status`/`cancel` 等写后出口走降级查询,查失败时 `teamNo` 为 `null`,不影响其余字段。
---
## 二、变更接口清单
| # | 接口 | 方法 | 路径 | 变更类型 | 说明 |
|---|------|------|------|----------|------|
| 1 | §2.7 查询最终确认回执列表 | GET | `/admin/house/assignments/requirements/{requirementId}/receipts` | 新增字段 | `teamNo` |
| 2 | §2.7 上传最终确认回执(multipart, 可选凭证) | POST | `/admin/house/assignments/requirements/{requirementId}/receipts` | 新增字段 | `teamNo` |
| 3 | §2.6 日历某天下钻明细(date + scope=mine/all + status 多选, 按团折叠) | GET | `/admin/house/calendar/day` | 新增字段 | `teamNo` |
| 4 | §2.0b 需求历史完整列表(N 版独立数据 + diff + 退回信息) | GET | `/admin/house/orders/{orderId}/requirement-history` | 新增字段 | `teamNo` |
| 5 | 投诉分页列表(只读) | GET | `/v3/admin/complaint/page` | 新增字段 | `teamNo` |
| 6 | 投诉详情(只读) | GET | `/v3/admin/complaint/{id}` | 新增字段 | `teamNo` |
| 7 | 团期配房详情 | GET | `/v3/admin/house/group-batches/{groupBatchId}` | 新增字段 | `teamNo` |
| 8 | 团期分房总览(只读) | GET | `/v3/admin/house/group-batches/{groupBatchId}/allocations` | 新增字段 | `teamNo` |
| 9 | 人工微调分房 | POST | `/v3/admin/house/group-batches/{groupBatchId}/allocations` | 新增字段 | `teamNo` |
| 10 | 重算分房 | POST | `/v3/admin/house/group-batches/{groupBatchId}/allocations/rebuild` | 新增字段 | `teamNo` |
| 11 | 整团确认订房 | POST | `/v3/admin/house/group-batches/{groupBatchId}/room-plans/confirm` | 新增字段 | `teamNo` |
| 12 | 订房确认预检(只读) | GET | `/v3/admin/house/group-batches/{groupBatchId}/room-plans/confirm-check` | 新增字段 | `teamNo` |
| 13 | 按日确认订房 | POST | `/v3/admin/house/group-batches/{groupBatchId}/room-plans/days/{stayDate}/confirm` | 新增字段 | `teamNo` |
| 14 | 团期逐日用房需求明细 | GET | `/v3/admin/house/group-batches/{groupBatchId}/room-requirements` | 新增字段 | `teamNo` |
| 15 | §6.5 酒店维度操作日志(P2 候用, 接口设计完整保留) | GET | `/v3/admin/house/hotels/{hotelId}/operation-log` | 新增字段 | `teamNo` |
| 16 | 退保 | POST | `/v3/admin/insurance/cancel/{id}` | 新增字段 | `teamNo` |
| 17 | 订单保障状态 | GET | `/v3/admin/insurance/coverage/{orderId}` | 新增字段 | `teamNo` |
| 18 | 保险订单列表 | GET | `/v3/admin/insurance/list` | 新增字段 | `teamNo` |
| 19 | 添加出行人保险备注 | POST | `/v3/admin/insurance/order/{orderId}/traveler-note` | 新增字段 | `teamNo` |
| 20 | 保险订单列表 | GET | `/v3/admin/insurance/orders` | 新增字段 | `teamNo` |
| 21 | 按订单查保险列表 | GET | `/v3/admin/insurance/orders/by-order/{orderId}` | 新增字段 | `teamNo` |
| 22 | 保险订单列表 | GET | `/v3/admin/insurance/orders/{id}` | 新增字段 | `teamNo` |
| 23 | 刷新/同步保险订单出单状态 | POST | `/v3/admin/insurance/orders/{id}/sync-status` | 新增字段 | `teamNo` |
| 24 | 手动投保 | POST | `/v3/admin/insurance/purchase` | 新增字段 | `teamNo` |
| 25 | 创建订单 | POST | `/v3/admin/order` | 新增字段 | `teamNo` |
| 26 | 财务审批通过(SUBMITTED→APPROVED) | PUT | `/v3/admin/order/advance/{advanceId}/approve` | 新增字段 | `teamNo` |
| 27 | 财务审批驳回(SUBMITTED→REJECTED) | PUT | `/v3/admin/order/advance/{advanceId}/reject` | 新增字段 | `teamNo` |
| 28 | GB-ADM-061 团期审批中心列表(流团 + 退单户) | GET | `/v3/admin/order/group-batch/approvals/page` | 新增字段 | `teamNo` |
| 29 | GB-ADM-072 退单审批分页列表(管理员) | GET | `/v3/admin/order/group-batch/withdraw/page` | 新增字段 | `teamNo` |
| 30 | A2 团期详情 | GET | `/v3/admin/order/group-batch/{groupBatchId}` | 新增字段 | `teamNo` |
| 31 | GB-ADM-042 发起团期预支(创建即待审批) | POST | `/v3/admin/order/group-batch/{groupBatchId}/advance` | 新增字段 | `teamNo` |
| 32 | 核单面板(GB-ADM-050) | GET | `/v3/admin/order/group-batch/{groupBatchId}/audit` | 新增字段 | `teamNo` |
| 33 | 保存核单录入(GB-ADM-051) | PUT | `/v3/admin/order/group-batch/{groupBatchId}/audit` | 新增字段 | `teamNo` |
| 34 | 提交核算(GB-ADM-052) | POST | `/v3/admin/order/group-batch/{groupBatchId}/audit/allocate` | 新增字段 | `teamNo` |
| 35 | 团期确认预检(只读,配置 → 确认) | GET | `/v3/admin/order/group-batch/{groupBatchId}/confirm-check` | 新增字段 | `teamNo` |
| 36 | GB-ADM-031 手动开合同/保险 | POST | `/v3/admin/order/group-batch/{groupBatchId}/contracts/issue` | 新增字段 | `teamNo` |
| 37 | GB-ADM-031 作废重开合同/保险 | POST | `/v3/admin/order/group-batch/{groupBatchId}/contracts/reissue` | 新增字段 | `teamNo` |
| 38 | 批量催签合同 | POST | `/v3/admin/order/group-batch/{groupBatchId}/contracts/remind-sign` | 新增字段 | `teamNo` |
| 39 | A5 团期行程逐日汇总(GB-ADM-018) | GET | `/v3/admin/order/group-batch/{groupBatchId}/itinerary` | 新增字段 | `teamNo` |
| 40 | A6 团期行程某项逐户下钻(GB-ADM-019) | GET | `/v3/admin/order/group-batch/{groupBatchId}/itinerary/nodes/{nodeKey}` | 新增字段 | `teamNo` |
| 41 | 出具团级行程单(只排版全团一致项,差异项标「按户另见」) | GET | `/v3/admin/order/group-batch/{groupBatchId}/print-itinerary` | 新增字段 | `teamNo` |
| 42 | 手工复判进入待出发硬门(物资准备中 → 待出发) | POST | `/v3/admin/order/group-batch/{groupBatchId}/recheck-departure-gate` | 新增字段 | `teamNo` |
| 43 | 全团需求汇总 | GET | `/v3/admin/order/group-batch/{groupBatchId}/requirement-summary` | 新增字段 | `teamNo` |
| 44 | 整体确认需求缺失预检(只读) | GET | `/v3/admin/order/group-batch/{groupBatchId}/requirement/confirm-check` | 新增字段 | `teamNo` |
| 45 | 按户打回需求(退回定制师重提) | POST | `/v3/admin/order/group-batch/{groupBatchId}/requirement/reject` | 新增字段 | `teamNo` |
| 46 | 批量确认接送机需求(允许部分成功) | POST | `/v3/admin/order/group-batch/{groupBatchId}/requirement/transfer/batch-confirm` | 新增字段 | `teamNo` |
| 47 | 团期配房明细(只读) | GET | `/v3/admin/order/group-batch/{groupBatchId}/room-plans` | 新增字段 | `teamNo` |
| 48 | 核单按行程节点逐户下钻(GB-ADM-056) | POST | `/v3/admin/order/group-batch/{groupBatchId}/settlement/node-lines` | 新增字段 | `teamNo` |
| 49 | 转订单(子订单跨期转入) | POST | `/v3/admin/order/group-batch/{groupBatchId}/sub-order/{orderId}/transfer-in` | 新增字段 | `teamNo` |
| 50 | 转订单候选子订单列表 | GET | `/v3/admin/order/group-batch/{groupBatchId}/transfer-candidates` | 新增字段 | `teamNo` |
| 51 | 读团期正式用车需求(未形成时返回 null;带配车刷新状态只读投影) | GET | `/v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement` | 新增字段 | `teamNo` |
| 52 | 保存团期正式用车需求(全量替换) | PUT | `/v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement` | 新增字段 | `teamNo` |
| 53 | 自动汇总正式用车需求草稿(只读;草稿可原样 PUT) | GET | `/v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement/aggregate-draft` | 新增字段 | `teamNo` |
| 54 | 声明整团无需用车(零分组已确认,撤销走 withdraw) | POST | `/v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement/waive` | 新增字段 | `teamNo` |
| 55 | 整份撤回正式用车需求(退回草稿,已配车辆不动) | POST | `/v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement/withdraw` | 新增字段 | `teamNo` |
| 56 | 发票详情(完整申请明细,供上传弹窗/详情页) | GET | `/v3/admin/order/invoice/{id}` | 新增字段 | `teamNo` |
| 57 | 生成用餐信息(按订单产品快照生成空行,已有行不重复生成) | POST | `/v3/admin/order/meal-info/generate` | 新增字段 | `teamNo` |
| 58 | 查询用餐信息列表(按订单 / 团期 / 未挂归属) | GET | `/v3/admin/order/meal-info/list` | 新增字段 | `teamNo` |
| 59 | 重置用餐信息(删掉全部行后按快照重新生成空行) | POST | `/v3/admin/order/meal-info/reset` | 新增字段 | `teamNo` |
| 60 | 保存用餐信息(整单一次保存:带行ID覆盖、不带新增、没传上来的软删) | POST | `/v3/admin/order/meal-info/save` | 新增字段 | `teamNo` |
| 61 | 套用用餐模版(返回订单现有行 + 模版套出来的行,模版行接在后面,不改库) | POST | `/v3/admin/order/meal-template/apply` | 新增字段 | `teamNo` |
| 62 | §2.5 房间分配查询(按家庭分组) | GET | `/v3/admin/order/orders/{orderId}/rooms` | 新增字段 | `teamNo` |
| 63 | 受控推进单个订单状态(走状态机+写日志+联动房车日期,幂等) | POST | `/v3/admin/order/{id}/advance-state` | 新增字段 | `teamNo` |
| 64 | 订单详情 - 发票 Tab | GET | `/v3/admin/order/{id}/invoices` | 新增字段 | `teamNo` |
| 65 | 查询 staff 配置列表 | GET | `/v3/admin/order/{id}/staff` | 新增字段 | `teamNo` |
| 66 | 新增 staff 配置 | POST | `/v3/admin/order/{id}/staff` | 新增字段 | `teamNo` |
| 67 | 编辑 staff 配置 | PUT | `/v3/admin/order/{id}/staff/{staffAssignmentId}` | 新增字段 | `teamNo` |
| 68 | 设置 staff 报账人等级(核心订单) | PUT | `/v3/admin/order/{id}/staff/{staffAssignmentId}/reporter-rank` | 新增字段 | `teamNo` |
| 69 | 终止行程·退款预览(出行中) | POST | `/v3/admin/order/{id}/terminate/refund-preview` | 新增字段 | `teamNo` |
| 70 | 大交通批次新增 | POST | `/v3/admin/order/{id}/transport-plan/add` | 新增字段 | `teamNo` |
| 71 | 大交通批次批量替换 | POST | `/v3/admin/order/{id}/transport-plan/batch` | 新增字段 | `teamNo` |
| 72 | 大交通批次列表 | GET | `/v3/admin/order/{id}/transport-plan/list` | 新增字段 | `teamNo` |
| 73 | 大交通批次编辑 | POST | `/v3/admin/order/{id}/transport-plan/{planId}/edit` | 新增字段 | `teamNo` |
| 74 | 单个出行人新增 | POST | `/v3/admin/order/{id}/traveler/add` | 新增字段 | `teamNo` |
| 75 | 出行人列表 | GET | `/v3/admin/order/{id}/traveler/list` | 新增字段 | `teamNo` |
| 76 | 订单增减项(统一端点,按 direction 分流) | POST | `/v3/admin/order/{orderId}/adjustment` | 新增字段 | `teamNo` |
| 77 | 创建预支(创建即待审批) | POST | `/v3/admin/order/{orderId}/advance` | 新增字段 | `teamNo` |
| 78 | 分页查询本单预支列表 | GET | `/v3/admin/order/{orderId}/advances` | 新增字段 | `teamNo` |
| 79 | 查询订单优惠+附加费清单 | GET | `/v3/admin/order/{orderId}/discount-surcharge/list` | 新增字段 | `teamNo` |
| 80 | 新增订单优惠(已废弃,改调 /adjustment) | POST | `/v3/admin/order/{orderId}/discounts` | 新增字段 | `teamNo` |
| 81 | 定制师代客申请发票(须订单已完成) | POST | `/v3/admin/order/{orderId}/invoice/apply` | 新增字段 | `teamNo` |
| 82 | 生成电子行程单数据(对客) | GET | `/v3/admin/order/{orderId}/itinerary-document` | 新增字段 | `teamNo` |
| 83 | 查询订单完整行程(含全部实配嵌套,已真实化 Issue #2471) | GET | `/v3/admin/order/{orderId}/itinerary/full` | 新增字段 | `teamNo` |
| 84 | 查询订单线下收款列表(含已撤销行,审计溯源用) | GET | `/v3/admin/order/{orderId}/payment/manual-receipt` | 新增字段 | `teamNo` |
| 85 | 登记线下收款(报账人收款/对公转账/定制师代收),同事务推进 paid_amount | POST | `/v3/admin/order/{orderId}/payment/manual-receipt` | 新增字段 | `teamNo` |
| 86 | 撤销线下收款(同事务回退 paid_amount,行保留可追溯) | DELETE | `/v3/admin/order/{orderId}/payment/manual-receipt/{receiptId}` | 新增字段 | `teamNo` |
| 87 | 财务复核确认结算 | POST | `/v3/admin/order/{orderId}/settlement/confirm` | 新增字段 | `teamNo` |
| 88 | 管理员反确认核单终态快照 | POST | `/v3/admin/order/{orderId}/settlement/final-snapshots/reopen` | 新增字段 | `teamNo` |
| 89 | 完成核单 | POST | `/v3/admin/order/{orderId}/settlement/finalize` | 新增字段 | `teamNo` |
| 90 | 查询核单操作日志 | GET | `/v3/admin/order/{orderId}/settlement/logs` | 新增字段 | `teamNo` |
| 91 | 查询车辆核单草稿 | GET | `/v3/admin/order/{orderId}/settlement/step3/vehicles` | 新增字段 | `teamNo` |
| 92 | 全量保存车辆核单草稿 | PUT | `/v3/admin/order/{orderId}/settlement/step3/vehicles` | 新增字段 | `teamNo` |
| 93 | 查核单汇总快照 | GET | `/v3/admin/order/{orderId}/settlement/summary` | 新增字段 | `teamNo` |
| 94 | 新增订单附加费(已废弃,改调 /adjustment) | POST | `/v3/admin/order/{orderId}/surcharges` | 新增字段 | `teamNo` |
| 95 | 增订单标签 | POST | `/v3/admin/order/{orderId}/tag` | 新增字段 | `teamNo` |
| 96 | 分页查询退款申诉 | GET | `/v3/admin/refund/appeal/page` | 新增字段 | `teamNo` |
| 97 | 查询申诉详情(管理端) | GET | `/v3/admin/refund/appeal/{id}` | 新增字段 | `teamNo` |
| 98 | 客服代下退款申请 | POST | `/v3/admin/refund/application` | 新增字段 | `teamNo` |
| 99 | 手动完成退款 | PUT | `/v3/admin/refund/application/{applicationId}/complete` | 新增字段 | `teamNo` |
| 100 | 退款申请详情 | GET | `/v3/admin/refund/application/{id}` | 新增字段 | `teamNo` |
| 101 | 触发实退 | POST | `/v3/admin/refund/execute/{appId}` | 新增字段 | `teamNo` |
| 102 | 提交审核 | POST | `/v3/admin/refund/review` | 新增字段 | `teamNo` |
| 103 | 取消团队 | POST | `/v3/admin/team-report/cancel` | 新增字段 | `teamNo` |
| 104 | 暂存表单 | POST | `/v3/admin/team-report/save` | 新增字段 | `teamNo` |
| 105 | 查询审核状态 | GET | `/v3/admin/team-report/status/{orderId}` | 新增字段 | `teamNo` |
| 106 | 提交到12301平台 | POST | `/v3/admin/team-report/submit` | 新增字段 | `teamNo` |
| 107 | 获取上报记录 | GET | `/v3/admin/team-report/{orderId}` | 新增字段 | `teamNo` |
| 108 | 工作台仪表盘(角色分发,支持时间范围) | GET | `/admin/profile/dashboard` | 新增字段 | `data.upcomingTrips[].teamNo` |
| 109 | 工作台概览(已废弃) | GET | `/admin/designer/dashboard` | 新增字段 | `data.upcomingTrips[].teamNo` |
---
## 三、接口详情
### 1. §2.7 查询最终确认回执列表 `GET /admin/house/assignments/requirements/{requirementId}/receipts`
**VO**: `HouseFinalizeReceiptRespVO`
#### 使用场景
§2.7 查询最终确认回执列表。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| requirementId | Path | Long | ✅ | 正整数 | 需求主键 requirement_id |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /admin/house/assignments/requirements/1934567890123456701/receipts
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": []
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 2. §2.7 上传最终确认回执(multipart, 可选凭证) `POST /admin/house/assignments/requirements/{requirementId}/receipts`
**VO**: `HouseFinalizeReceiptRespVO`
#### 使用场景
§2.7 上传最终确认回执(multipart, 可选凭证)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| requirementId | Path | Long | ✅ | 正整数 | 需求主键 requirement_id |
| file | Body(multipart) | File | ✅ | — | 上传文件 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
POST /admin/house/assignments/requirements/{requirementId}/receipts
Content-Type: multipart/form-data; boundary=...
(file 字段为二进制流,略)
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": null
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 3. §2.6 日历某天下钻明细(date + scope=mine/all + status 多选, 按团折叠) `GET /admin/house/calendar/day`
**VO**: `DayTourItemVO`
#### 使用场景
§2.6 日历某天下钻明细(date + scope=mine/all + status 多选, 按团折叠)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| date | Query | LocalDate | — | — | date |
| scope | Query | String | — | — | scope |
| status | Query | String | — | — | 状态点筛选:inProgress/inquiry/pending/exception,支持多选逗号分隔;不填 = 全部 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | orderId(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /admin/house/calendar/day?date=2026-09-27&scope=scope&status=inProgress
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": []
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 4. §2.0b 需求历史完整列表(N 版独立数据 + diff + 退回信息) `GET /admin/house/orders/{orderId}/requirement-history`
**VO**: `RequirementHistoryRespVO`
#### 使用场景
§2.0b 需求历史完整列表(N 版独立数据 + diff + 退回信息)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | 订单 ID |
| includeDiff | Query | Boolean | — | — | includeDiff |
| onlyReturned | Query | Boolean | — | — | onlyReturned |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | orderId(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /admin/house/orders/{orderId}/requirement-history?includeDiff=True&onlyReturned=True
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 5. 投诉分页列表(只读) `GET /v3/admin/complaint/page`
**VO**: `ComplaintRespVO`
#### 使用场景
投诉分页列表(只读)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| page | Query | Integer | — | — | 页码 |
| pageSize | Query | Integer | — | — | 每页条数 |
| keyword | Query | String | — | — | keyword |
| orderNo | Query | String | — | — | 订单号精确匹配 |
| groupCode | Query | String | — | — | 团号精确匹配 |
| customizerNickname | Query | String | — | — | 定制师昵称模糊 |
| types | Query | List<String> | — | — | types |
| isResolved | Query | Boolean | — | — | isResolved |
| dateFrom | Query | LocalDate | — | — | dateFrom |
| dateTo | Query | LocalDate | — | — | dateTo |
| dayScope | Query | String | — | — | dayScope |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.records[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/complaint/page?page=1&pageSize=20&keyword=keyword&orderNo=HL202604220001&groupCode=A001&customizerNickname=张
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": []
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 6. 投诉详情(只读) `GET /v3/admin/complaint/{id}`
**VO**: `ComplaintRespVO`
#### 使用场景
投诉详情(只读)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | id |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/complaint/1934567890123456701
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 7. 团期配房详情 `GET /v3/admin/house/group-batches/{groupBatchId}`
**VO**: `HouseGroupBatchBoardRespVO`
#### 使用场景
团期配房详情。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期主订单 ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.outOfRangeHouseholds[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.outOfRangeHouseholds | List<OutOfRangeHousehold> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.specialTags[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.specialTags | List<HouseholdSpecialTags> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/house/group-batches/1934567890123456701
```
#### 响应示例
共 2 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"outOfRangeHouseholds": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 8. 团期分房总览(只读) `GET /v3/admin/house/group-batches/{groupBatchId}/allocations`
**VO**: `GroupBatchRoomAllocationOverviewRespVO`
#### 使用场景
团期分房总览(只读)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期主订单 ID |
| stayDate | Query | LocalDate | — | — | 只看某一入住日;不传 = 全部有计划行或有需求的日 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.days[].plans[].allocations[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 分给哪一户(同层级对照) |
| data.days[].plans[].allocations | List<Allocation> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.days[].households[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.days[].households | List<Household> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.blockedHouseholds[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.blockedHouseholds | List<BlockedHousehold> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/house/group-batches/{groupBatchId}/allocations?stayDate=2026-06-12
```
#### 响应示例
共 3 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"days": [
{
"plans": [
{
"allocations": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
]
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 9. 人工微调分房 `POST /v3/admin/house/group-batches/{groupBatchId}/allocations`
**VO**: `GroupBatchRoomAllocationRebuildRespVO`
#### 使用场景
人工微调分房。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期主订单 ID |
| items | Body | List<GroupBatchRoomAllocationItemReqVO> | — | — | 人工分房行,与 clearPlanIds 至少一个非空;最多 500 行 |
| clearPlanIds | Body | List<Long> | — | — | 这些计划行下的人工分房全部软删(回到纯自动分房),最多 200 条 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.days[].shortage[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.days[].shortage | List<ShortageItem> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.days[].manualConflicts[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.days[].manualConflicts | List<ManualConflictItem> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.days[].outOfRange[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.days[].outOfRange | List<OutOfRangeItem> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.warnings[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.warnings | List<GroupBatchRoomConfirmWarningVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"items": [
{
"planId": "1934567890123456701",
"orderId": "1934567890123456701",
"roomCount": 1,
"roomGroupNo": "F1",
"travelerCount": 2,
"bedType": "twin",
"remark": "备注,≤256 字"
}
],
"clearPlanIds": []
}
```
#### 响应示例
共 4 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"days": [
{
"shortage": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 10. 重算分房 `POST /v3/admin/house/group-batches/{groupBatchId}/allocations/rebuild`
**VO**: `GroupBatchRoomAllocationRebuildRespVO`
#### 使用场景
重算分房。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期主订单 ID |
| force | Body | Boolean | — | — | 是否先重置全部人工分房;默认 false |
| stayDate | Body | LocalDate | — | — | 只重算某一入住日;不传 = 整团全部已确认日 |
| reason | Body | String | — | — | 重置原因,force=true 时必填(≤256 字),写进团级时间线 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.days[].shortage[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.days[].shortage | List<ShortageItem> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.days[].manualConflicts[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.days[].manualConflicts | List<ManualConflictItem> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.days[].outOfRange[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.days[].outOfRange | List<OutOfRangeItem> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.warnings[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.warnings | List<GroupBatchRoomConfirmWarningVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"force": "false",
"stayDate": "2026-06-12",
"reason": "重置原因,force=true 时必填"
}
```
#### 响应示例
共 4 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"days": [
{
"shortage": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 11. 整团确认订房 `POST /v3/admin/house/group-batches/{groupBatchId}/room-plans/confirm`
**VO**: `GroupBatchRoomConfirmAllRespVO`
#### 使用场景
整团确认订房。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期主订单 ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.warnings[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 相关子订单 ID,无具体户时为空(同层级对照) |
| data.warnings | List<GroupBatchRoomConfirmWarningVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
POST /v3/admin/house/group-batches/1934567890123456701/room-plans/confirm
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"warnings": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"warnings": [
{
"orderId": "1934567890123456701",
"teamNo": null
}
]
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 12. 订房确认预检(只读) `GET /v3/admin/house/group-batches/{groupBatchId}/room-plans/confirm-check`
**VO**: `GroupBatchRoomConfirmCheckRespVO`
#### 使用场景
订房确认预检(只读)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期主订单 ID |
| stayDate | Query | LocalDate | — | — | 入住日,不传则返回全部相关日 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.noBaselineOrders[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.noBaselineOrders | List<NoBaselineOrder> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.outOfRangeOrders[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.outOfRangeOrders | List<OutOfRangeOrder> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/house/group-batches/{groupBatchId}/room-plans/confirm-check?stayDate=2026-06-12
```
#### 响应示例
共 2 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"noBaselineOrders": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 13. 按日确认订房 `POST /v3/admin/house/group-batches/{groupBatchId}/room-plans/days/{stayDate}/confirm`
**VO**: `GroupBatchRoomDayConfirmRespVO`
#### 使用场景
按日确认订房。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期主订单 ID |
| stayDate | Path | LocalDate | ✅ | — | 入住日 yyyy-MM-dd |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.warnings[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 相关子订单 ID,无具体户时为空(同层级对照) |
| data.warnings | List<GroupBatchRoomConfirmWarningVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
POST /v3/admin/house/group-batches/1934567890123456701/room-plans/days/2026-09-27/confirm
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"warnings": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"warnings": [
{
"orderId": "1934567890123456701",
"teamNo": null
}
]
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 14. 团期逐日用房需求明细 `GET /v3/admin/house/group-batches/{groupBatchId}/room-requirements`
**VO**: `HouseGroupBatchRoomRequirementRespVO`
#### 使用场景
团期逐日用房需求明细。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期主订单 ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.days[].households[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.days[].households | List<Household> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.householdsWithoutBasis[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.householdsWithoutBasis | List<HouseholdWithoutBasis> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.outOfRangeHouseholds[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.outOfRangeHouseholds | List<HouseGroupBatchBoardRespVO.OutOfRangeHousehold> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/house/group-batches/1934567890123456701/room-requirements
```
#### 响应示例
共 3 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"days": [
{
"households": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 15. §6.5 酒店维度操作日志(P2 候用, 接口设计完整保留) `GET /v3/admin/house/hotels/{hotelId}/operation-log`
**VO**: `HouseOperationLogItemVO`
#### 使用场景
§6.5 酒店维度操作日志(P2 候用, 接口设计完整保留)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| hotelId | Path | Long | ✅ | 正整数 | hotelId |
| opType | Query | String | — | — | opType |
| source | Query | String | — | — | source |
| operatorId | Query | Long | — | — | 操作人房务 ID |
| keyword | Query | String | — | — | keyword |
| startDate | Query | LocalDateTime | — | — | startDate |
| endDate | Query | LocalDateTime | — | — | 结束时间 |
| sortBy | Query | String | — | — | sortBy |
| page | Query | Long | — | — | 页码 |
| pageSize | Query | Long | — | — | pageSize |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.records[].detail.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
| data.records[].detail | OperationDetailVO | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/house/hotels/{hotelId}/operation-log?opType=opType&source=source&operatorId=1001&keyword=keyword&startDate=2026-09-27T10:00:00&endDate=2026-05-31T23:59:59
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": [
{
"detail": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": []
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 16. 退保 `POST /v3/admin/insurance/cancel/{id}`
**VO**: `InsuranceOrderDetailVO`
#### 使用场景
退保。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| insuranceOrderId | Path | Long | ✅ | 正整数 | insuranceOrderId |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 关联业务订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
POST /v3/admin/insurance/cancel/{id}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": null
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 17. 订单保障状态 `GET /v3/admin/insurance/coverage/{orderId}`
**VO**: `OrderInsuranceCoverageVO`
#### 使用场景
订单保障状态。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | orderId |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 旅行订单ID(同层级对照) |
| data.insuranceOrders[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.insuranceOrders | List<InsuranceOrderDetailVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/insurance/coverage/1934567890123456701
```
#### 响应示例
共 2 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 18. 保险订单列表 `GET /v3/admin/insurance/list`
**VO**: `InsuranceOrderVO`
#### 使用场景
保险订单列表。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| page | Query | Integer | — | — | 页码 |
| pageSize | Query | Integer | — | — | 每页条数 |
| orderId | Query | Long | — | — | 关联订单ID |
| policyNo | Query | String | — | — | 保单号 |
| status | Query | String | — | — | status |
| insuredName | Query | String | — | — | 被保人姓名 |
| insuranceProductId | Query | Long | — | — | 保险产品ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.records[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 关联业务订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/insurance/list?page=1&pageSize=20&orderId=1234567890&policyNo=POL202605010001&status=status&insuredName=张三
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": []
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 19. 添加出行人保险备注 `POST /v3/admin/insurance/order/{orderId}/traveler-note`
**VO**: `InsuranceTravelerNoteVO`
#### 使用场景
添加出行人保险备注。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | orderId |
| travelerId | Body | Long | — | — | 出行人ID |
| travelerName | Body | String | — | — | 出行人姓名 |
| noteType | Body | String | — | — | noteType |
| remark | Body | String | — | — | 备注说明 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"travelerId": "1001",
"travelerName": "张三",
"noteType": "noteType",
"remark": "已通过线下渠道购买保险"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": null
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 20. 保险订单列表 `GET /v3/admin/insurance/orders`
**VO**: `InsuranceOrderVO`
#### 使用场景
保险订单列表。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| page | Query | Integer | — | — | 页码 |
| pageSize | Query | Integer | — | — | 每页条数 |
| orderId | Query | Long | — | — | 关联订单ID |
| policyNo | Query | String | — | — | 保单号 |
| status | Query | String | — | — | status |
| insuredName | Query | String | — | — | 被保人姓名 |
| insuranceProductId | Query | Long | — | — | 保险产品ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.records[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 关联业务订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/insurance/orders?page=1&pageSize=20&orderId=1234567890&policyNo=POL202605010001&status=status&insuredName=张三
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": []
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 21. 按订单查保险列表 `GET /v3/admin/insurance/orders/by-order/{orderId}`
**VO**: `InsuranceOrderVO`
#### 使用场景
按订单查保险列表。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | orderId |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 关联业务订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/insurance/orders/by-order/1934567890123456701
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": []
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 22. 保险订单列表 `GET /v3/admin/insurance/orders/{id}`
**VO**: `InsuranceOrderDetailVO`
#### 使用场景
保险订单列表。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| insuranceOrderId | Path | Long | ✅ | 正整数 | insuranceOrderId |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 关联业务订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/insurance/orders/{id}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 23. 刷新/同步保险订单出单状态 `POST /v3/admin/insurance/orders/{id}/sync-status`
**VO**: `InsuranceOrderDetailVO`
#### 使用场景
刷新/同步保险订单出单状态。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| insuranceOrderId | Path | Long | ✅ | 正整数 | insuranceOrderId |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 关联业务订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
POST /v3/admin/insurance/orders/{id}/sync-status
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": null
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 24. 手动投保 `POST /v3/admin/insurance/purchase`
**VO**: `InsuranceOrderDetailVO`
#### 使用场景
手动投保。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Body | Long | — | — | 订单ID |
| schemeId | Body | Long | — | — | schemeId |
| insuranceProductId | Body | Long | — | — | insuranceProductId |
| planId | Body | Long | — | — | planId |
| coverageStartDate | Body | LocalDate | — | — | 保障开始日期(为空时后端按订单 startDate 自动填充) |
| coverageEndDate | Body | LocalDate | — | — | 保障结束日期(为空时后端按订单 endDate 自动填充) |
| insuredPersons | Body | List<InsuredPersonItem> | — | — | 被保人列表(为空时后端按订单出行人自动填充;传了则以传入为准) |
| remark | Body | String | — | — | 备注 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 关联业务订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"orderId": "1234567890",
"schemeId": "1934567890123456701",
"insuranceProductId": "1934567890123456701",
"planId": "1934567890123456701",
"coverageStartDate": "2026-05-01",
"coverageEndDate": "2026-05-07",
"insuredPersons": [
{
"name": "张三",
"idCardType": "idCardType",
"idCardNo": "110101199001011234",
"birthday": "1990-01-01",
"phone": "13800138000"
}
],
"remark": "备注"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": [
{
"orderId": "1934567890123456701",
"teamNo": null
}
]
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 25. 创建订单 `POST /v3/admin/order`
**VO**: `OrderCreateRespVO`
#### 使用场景
创建订单。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| productId | Body | Long | — | — | 产品 ID |
| tierSeq | Body | Integer | — | — | 档位序号 |
| departureDate | Body | LocalDate | — | — | 出发日期(v4.9 改必填) |
| adultCount | Body | Integer | — | — | 成人数(≥1) |
| childCount | Body | Integer | — | — | 儿童数(6-12岁;默认 0) |
| youngChildCount | Body | Integer | — | — | 幼童数(2-5岁,占座不占床;默认 0) |
| babyCount | Body | Integer | — | — | 婴儿数(0-1岁,不占座不占床;默认 0) |
| customerName | Body | String | — | — | 客户姓名 |
| customerPhone | Body | String | — | — | 客户手机(明文传,DB 层 AES) |
| customerRemark | Body | String | — | — | 客户备注(≤500) |
| createSource | Body | String | — | — | 创建来源(v5.17,非必填,不传默认 CONSULTANT)。 |
| productBatchId | Body | Long | — | — | 团期 ID(product 侧班期 batchId,v5.17,非必填;GROUP 产品必传,自由出团为空) |
| roomCount | Body | Integer | — | — | 房间数(v5.17,非必填,写入 order_main.room_count) |
| tags | Body | List<String> | — | — | 订单标签名列表(v5.17,非必填,写入 order_tag) |
| sharerOpenid | Body | String | — | — | 分享人 openid(C 端裂变追踪/佣金归属,非必填) |
| customizerId | Body | Long | — | — | 分享归因 customizerId(C 端从分享链接带,非必填) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| id | Long | 订单主键(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
此处仅示例前 10 个字段,完整字段见入参表。
```json
{
"productId": "30001234567",
"tierSeq": 1,
"departureDate": "2026-06-01",
"adultCount": 2,
"childCount": 1,
"youngChildCount": 0,
"babyCount": 0,
"customerName": "张三",
"customerPhone": "13800002046",
"customerRemark": "希望住朝阳房"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"id": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 26. 财务审批通过(SUBMITTED→APPROVED) `PUT /v3/admin/order/advance/{advanceId}/approve`
**VO**: `OrderAdvanceRespVO`
#### 使用场景
财务审批通过(SUBMITTED→APPROVED)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| advanceId | Path | Long | ✅ | 正整数 | 预支ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
PUT /v3/admin/order/advance/1934567890123456701/approve
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 27. 财务审批驳回(SUBMITTED→REJECTED) `PUT /v3/admin/order/advance/{advanceId}/reject`
**VO**: `OrderAdvanceRespVO`
#### 使用场景
财务审批驳回(SUBMITTED→REJECTED)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| advanceId | Path | Long | ✅ | 正整数 | 预支ID |
| reason | Body | String | — | — | 驳回原因(必填) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"reason": "驳回原因"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": null
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 28. GB-ADM-061 团期审批中心列表(流团 + 退单户) `GET /v3/admin/order/group-batch/approvals/page`
**VO**: `GroupBatchApprovalItemRespVO`
#### 使用场景
GB-ADM-061 团期审批中心列表(流团 + 退单户)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| bizType | Query | String | — | — | 业务类型筛选:DISBAND 流团 / WITHDRAW 退单户;<b>不传 = 两类都要</b> |
| approvalStatus | Query | String | — | — | 审批状态筛选:PENDING / APPROVED / REJECTED;不传 = 全部 |
| groupBatchId | Query | Long | — | — | 团期 ID 筛选;不传 = 全部 |
| batchName | Query | String | — | — | 团期名称模糊搜索(#8253):包含匹配 batchName;输入「第N期」/「N」时另按期号精确匹配 |
| pageNum | Query | Integer | — | — | 页码,从 1 开始 |
| pageSize | Query | Integer | — | — | 每页条数,1-100 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.records[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 被退子订单 ID(WITHDRAW 有值,DISBAND 为 null)(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/group-batch/approvals/page?bizType=DISBAND&approvalStatus=PENDING&groupBatchId=90211&batchName=jw测试&pageNum=1&pageSize=20
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": []
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 29. GB-ADM-072 退单审批分页列表(管理员) `GET /v3/admin/order/group-batch/withdraw/page`
**VO**: `WithdrawApprovalItemRespVO`
#### 使用场景
GB-ADM-072 退单审批分页列表(管理员)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| approvalStatus | Query | String | — | — | 审批状态(PENDING/APPROVED/REJECTED;缺省 PENDING,传 ALL 查全部) |
| groupBatchId | Query | Long | — | — | 按团期筛选(可选) |
| keyword | Query | String | — | — | 客户姓名 / 订单号模糊关键词(可选) |
| createdFrom | Query | String | — | — | 提交时间起(yyyy-MM-dd,可选) |
| createdTo | Query | String | — | — | 提交时间止(yyyy-MM-dd,含当日,可选) |
| pageNo | Query | Integer | — | — | 页码,从 1 开始 |
| pageSize | Query | Integer | — | — | 每页条数,默认 20,最大 100 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.records[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/group-batch/withdraw/page?approvalStatus=PENDING&groupBatchId=800001&keyword=林婉清&createdFrom=2026-09-01&createdTo=2026-09-30&pageNo=1
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": []
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 30. A2 团期详情 `GET /v3/admin/order/group-batch/{groupBatchId}`
**VO**: `GroupBatchDetailRespVO`
#### 使用场景
A2 团期详情。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.departureGates[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| blockedOrderId | Long | 卡在哪一户(仅出行人证件 / 合同保险两门可能有值,其余为 null);(同层级对照) |
| data.departureGates | List<GroupBatchDepartureGateVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/group-batch/1934567890123456701
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"departureGates": [
{
"blockedOrderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 31. GB-ADM-042 发起团期预支(创建即待审批) `POST /v3/admin/order/group-batch/{groupBatchId}/advance`
**VO**: `OrderAdvanceRespVO`
#### 使用场景
GB-ADM-042 发起团期预支(创建即待审批)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
| payeeStaffId | Body | Long | — | — | 借款对象(资源域 staff.staff_id,取自本团领款人候选下拉项的 id) |
| advanceType | Body | String | — | — | 借款类型(数据字典 advance_type 的 dictValue) |
| amount | Body | BigDecimal | — | — | 预支金额,> 0 且不超过可支取余额(团期统一池) |
| purpose | Body | String | — | — | 用途说明(选填) |
| voucherUrl | Body | String | — | — | 凭证文件 URL(选填,前端上传后回传) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"payeeStaffId": "88102",
"advanceType": "住宿押金",
"amount": "3000.00",
"purpose": "沿途住宿押金",
"voucherUrl": "凭证文件 URL"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 32. 核单面板(GB-ADM-050) `GET /v3/admin/order/group-batch/{groupBatchId}/audit`
**VO**: `GroupBatchAuditRespVO`
#### 使用场景
核单面板(GB-ADM-050)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.details[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.details | List<DetailVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.allocs[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.allocs | List<AllocVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.warnings[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.warnings | List<WarningVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.staffSettlements[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.staffSettlements | List<StaffSettlementVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/group-batch/1934567890123456701/audit
```
#### 响应示例
共 4 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"details": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 33. 保存核单录入(GB-ADM-051) `PUT /v3/admin/order/group-batch/{groupBatchId}/audit`
**VO**: `GroupBatchAuditWriteRespVO`
#### 使用场景
保存核单录入(GB-ADM-051)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
| items | Body | List<ItemReqVO> | — | — | 科目行全集(与 details 同事务对账保存,未提交的既有行软删) |
| details | Body | List<DetailReqVO> | — | — | 逐户用量全集(按 itemId + orderId 对账) |
| expectedVersion | Body | Integer | — | — | 乐观锁版本,取自 GB-ADM-050 返回的 version |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.warnings[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 关联子订单 ID(同层级对照) |
| data.warnings | List<WarningVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"items": [
{
"itemId": "1934567890123456790",
"category": "科目",
"itemName": "D2 图嘎营地蒙古包",
"dayNo": 2,
"unitPrice": "380.00",
"totalAmount": "4800.00",
"changeReason": "司机加班费已与车队确认",
"allocRule": "分摊口径",
"allocGroup": "BUS",
"seq": 1
}
],
"details": [
{
"itemId": "1934567890123456790",
"orderId": "1934567890123450001",
"quantity": "2",
"participated": "true",
"allocGroup": "BUS",
"note": "D3 提前离团"
}
],
"expectedVersion": 3
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"warnings": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"warnings": [
{
"orderId": "1934567890123456701",
"teamNo": null
}
]
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 34. 提交核算(GB-ADM-052) `POST /v3/admin/order/group-batch/{groupBatchId}/audit/allocate`
**VO**: `GroupBatchAuditAllocateRespVO`
#### 使用场景
提交核算(GB-ADM-052)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
| expectedVersion | Body | Integer | — | — | 乐观锁版本,取自 GB-ADM-050 / 上一次写接口返回的 version |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.allocs[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.allocs | List<AllocVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"expectedVersion": 3
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"allocs": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"allocs": [
{
"orderId": "1934567890123456701",
"teamNo": null
}
]
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 35. 团期确认预检(只读,配置 → 确认) `GET /v3/admin/order/group-batch/{groupBatchId}/confirm-check`
**VO**: `GroupBatchConfirmCheckRespVO`
#### 使用场景
团期确认预检(只读,配置 → 确认)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.unmetHouseholds[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.unmetHouseholds | List<UnmetHousehold> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/group-batch/1934567890123456701/confirm-check
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"unmetHouseholds": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 36. GB-ADM-031 手动开合同/保险 `POST /v3/admin/order/group-batch/{groupBatchId}/contracts/issue`
**VO**: `GroupBatchIssueResultVO`
#### 使用场景
GB-ADM-031 手动开合同/保险。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
| orderIds | Body | List<Long> | — | — | 要出具的子订单 ID 列表;<b>为空表示本期全部尚未出具的户</b>。 |
| target | Body | String | — | — | 出具目标:CONTRACT 只开合同 / INSURANCE 只开保险 / BOTH 两者都开。 |
| reason | Body | String | — | — | 作废重开时的作废原因(仅 reissue 端点使用,可空) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.results[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.results | List<Item> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"orderIds": [],
"target": "CONTRACT",
"reason": "方案选错"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"results": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 37. GB-ADM-031 作废重开合同/保险 `POST /v3/admin/order/group-batch/{groupBatchId}/contracts/reissue`
**VO**: `GroupBatchIssueResultVO`
#### 使用场景
GB-ADM-031 作废重开合同/保险。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
| orderIds | Body | List<Long> | — | — | 要出具的子订单 ID 列表;<b>为空表示本期全部尚未出具的户</b>。 |
| target | Body | String | — | — | 出具目标:CONTRACT 只开合同 / INSURANCE 只开保险 / BOTH 两者都开。 |
| reason | Body | String | — | — | 作废重开时的作废原因(仅 reissue 端点使用,可空) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.results[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.results | List<Item> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"orderIds": [],
"target": "CONTRACT",
"reason": "方案选错"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"results": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 38. 批量催签合同 `POST /v3/admin/order/group-batch/{groupBatchId}/contracts/remind-sign`
**VO**: `GroupBatchIssueResultVO`
#### 使用场景
批量催签合同。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
| orderIds | Body | List<Long> | — | — | 要催签的子订单 ID 列表;<b>为空表示本期全部「合同已出但未签」的户</b>。 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.results[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.results | List<Item> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"orderIds": []
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"results": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 39. A5 团期行程逐日汇总(GB-ADM-018) `GET /v3/admin/order/group-batch/{groupBatchId}/itinerary`
**VO**: `GroupBatchItineraryRespVO`
#### 使用场景
A5 团期行程逐日汇总(GB-ADM-018)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.dayCountOutliers[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.dayCountOutliers | List<HouseholdDayCount> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/group-batch/1934567890123456701/itinerary
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"dayCountOutliers": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 40. A6 团期行程某项逐户下钻(GB-ADM-019) `GET /v3/admin/order/group-batch/{groupBatchId}/itinerary/nodes/{nodeKey}`
**VO**: `GroupBatchItineraryNodeDetailVO`
#### 使用场景
A6 团期行程某项逐户下钻(GB-ADM-019)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
| nodeKey | Path | String | ✅ | — | 归组键,取自 A5 响应 |
| dayNumber | Query | Integer | — | — | 只看第几天,取自 A5 该卡片所在天;不传=跨天全看 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.items[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.items | List<Item> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/group-batch/1934567890123456701/itinerary/nodes/归组键,取自 A5 响应?dayNumber=1
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"items": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 41. 出具团级行程单(只排版全团一致项,差异项标「按户另见」) `GET /v3/admin/order/group-batch/{groupBatchId}/print-itinerary`
**VO**: `GroupPrintItineraryRespVO`
#### 使用场景
出具团级行程单(只排版全团一致项,差异项标「按户另见」)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期 ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.dayCountOutliers[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.dayCountOutliers | List<HouseholdDayCountVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.roster[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.roster | List<RosterItemVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/group-batch/1934567890123456701/print-itinerary
```
#### 响应示例
共 2 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"dayCountOutliers": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 42. 手工复判进入待出发硬门(物资准备中 → 待出发) `POST /v3/admin/order/group-batch/{groupBatchId}/recheck-departure-gate`
**VO**: `GroupBatchDepartureGateRecheckRespVO`
#### 使用场景
手工复判进入待出发硬门(物资准备中 → 待出发)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.gates[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| blockedOrderId | Long | 卡在哪一户(仅出行人证件 / 合同保险两门可能有值,其余为 null);(同层级对照) |
| data.gates | List<GroupBatchDepartureGateVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
POST /v3/admin/order/group-batch/1934567890123456701/recheck-departure-gate
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"gates": [
{
"blockedOrderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"gates": [
{
"blockedOrderId": "1934567890123456701",
"teamNo": null
}
]
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 43. 全团需求汇总 `GET /v3/admin/order/group-batch/{groupBatchId}/requirement-summary`
**VO**: `GroupRequirementSummaryRespVO`
#### 使用场景
全团需求汇总。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.orderSpecialTags[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.orderSpecialTags | List<OrderSpecialTagItem> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/group-batch/1934567890123456701/requirement-summary
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderSpecialTags": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 44. 整体确认需求缺失预检(只读) `GET /v3/admin/order/group-batch/{groupBatchId}/requirement/confirm-check`
**VO**: `GroupBatchRequirementCheckRespVO`
#### 使用场景
整体确认需求缺失预检(只读)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.missing[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.missing | List<MissingItem> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.vehicleMissing[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.vehicleMissing | List<VehicleMissingItem> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.vehicleExemptHouseholds[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.vehicleExemptHouseholds | List<GroupVehicleExemptHouseholdVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.transferDeclaredWithoutRequirement[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.transferDeclaredWithoutRequirement | List<TransferDeclaredWithoutRequirementItem> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/group-batch/1934567890123456701/requirement/confirm-check
```
#### 响应示例
共 4 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"missing": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 45. 按户打回需求(退回定制师重提) `POST /v3/admin/order/group-batch/{groupBatchId}/requirement/reject`
**VO**: `GroupBatchRequirementRejectRespVO`
#### 使用场景
按户打回需求(退回定制师重提)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
| orderIds | Body | List<Long> | — | — | 被打回的子订单 ID 列表(必填,1~200 户,服务端去重) |
| reason | Body | String | — | — | 打回原因(必填,≤500 字) |
| resourceType | Body | String | — | — | 资源类型:HOTEL / VEHICLE / ALL(默认 ALL)。 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.rejected[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.rejected | List<RejectedItem> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"orderIds": [],
"reason": "房间需求与套餐不匹配,请重新填写",
"resourceType": "ALL"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"rejected": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 46. 批量确认接送机需求(允许部分成功) `POST /v3/admin/order/group-batch/{groupBatchId}/requirement/transfer/batch-confirm`
**VO**: `TransferBatchConfirmRespVO`
#### 使用场景
批量确认接送机需求(允许部分成功)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
| orderIds | Body | List<Long> | — | — | 待确认的子订单 ID 列表(必填,1~200 户,服务端去重) |
| dispatchRemark | Body | String | — | — | 确认备注(选填,≤500 字;整批共用,提供给车队) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.failed[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.failed | List<FailedItem> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"orderIds": [],
"dispatchRemark": "航班信息已核对,请安排接送"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"failed": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 47. 团期配房明细(只读) `GET /v3/admin/order/group-batch/{groupBatchId}/room-plans`
**VO**: `GroupBatchRoomPlanDetailRespVO`
#### 使用场景
团期配房明细(只读)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期主订单 ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.days[].plans[].allocations[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 分给哪一户(同层级对照) |
| data.days[].plans[].allocations | List<Allocation> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/group-batch/1934567890123456701/room-plans
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"days": [
{
"plans": [
{
"allocations": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
]
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 48. 核单按行程节点逐户下钻(GB-ADM-056) `POST /v3/admin/order/group-batch/{groupBatchId}/settlement/node-lines`
**VO**: `GroupBatchSettlementNodeLinesVO`
#### 使用场景
核单按行程节点逐户下钻(GB-ADM-056)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
| nodeIds | Body | List<Long> | — | — | 行程节点 ID 列表,原样取自团期行程汇总 `days[].nodes[].nodeIds`(雪花,传 String); |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.rows[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
| data.rows | List<Row> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"nodeIds": []
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"rows": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 49. 转订单(子订单跨期转入) `POST /v3/admin/order/group-batch/{groupBatchId}/sub-order/{orderId}/transfer-in`
**VO**: `TransferSubOrderRespVO`
#### 使用场景
转订单(子订单跨期转入)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 转入期(本期)团期ID |
| orderId | Path | Long | ✅ | 正整数 | 待转入的子订单ID |
| fromGroupBatchId | Body | Long | — | — | 源期团期主订单 ID(该子订单当前所在期) |
| reason | Body | String | — | — | 转期原因(选填,≤512 字) |
| notify | Body | Boolean | — | — | 转入后是否通知客户(默认 true) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 被转子订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"fromGroupBatchId": "1932847562341",
"reason": "客户改期,转到第 7 期",
"notify": "true"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 50. 转订单候选子订单列表 `GET /v3/admin/order/group-batch/{groupBatchId}/transfer-candidates`
**VO**: `TransferCandidateVO`
#### 使用场景
转订单候选子订单列表。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 转入期(本期)团期ID |
| keyword | Query | String | — | — | 订单号 / 客户名 / 期号 / 手机号(手机号须整串) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/group-batch/1934567890123456701/transfer-candidates?keyword=订单号 / 客户名 / 期号 / 手机号
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": []
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 51. 读团期正式用车需求(未形成时返回 null;带配车刷新状态只读投影) `GET /v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement`
**VO**: `GroupVehicleRequirementRespVO`
#### 使用场景
读团期正式用车需求(未形成时返回 null;带配车刷新状态只读投影)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.exemptHouseholds[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单ID(同层级对照) |
| data.exemptHouseholds | List<GroupVehicleExemptHouseholdVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/group-batch/1934567890123456701/vehicle-requirement
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"exemptHouseholds": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 52. 保存团期正式用车需求(全量替换) `PUT /v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement`
**VO**: `GroupVehicleRequirementRespVO`
#### 使用场景
保存团期正式用车需求(全量替换)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
| version | Body | Integer | — | — | 乐观锁版本号,首次保存传 null |
| remark | Body | String | — | — | 整份需求备注 |
| groups | Body | List<GroupItem> | — | — | 全部乘车分组(全量替换,未出现在本次提交里的分组会被移出当前版本) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.exemptHouseholds[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单ID(同层级对照) |
| data.exemptHouseholds | List<GroupVehicleExemptHouseholdVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"version": 3,
"remark": "9/13 起换大巴",
"groups": [
{
"groupId": "1867000000009",
"groupCode": "BUS",
"vehicleType": "bus",
"serviceStartDate": "2026-09-12",
"serviceEndDate": "2026-09-16",
"seats": 19,
"count": 2,
"specialTags": [],
"remark": "含高速费",
"days": [
{
"dayId": "1934567890123456701",
"dayNumber": 1,
"dayTitle": "天标题",
"description": "天描述/简介",
"nodes": [],
"hotels": [],
"coverUrl": "当日封面图URL, 来自 product",
"gatherPlace": null,
"dismissalPlace": null,
"routePoints": [],
"dailyMileage": "1000.00",
"serviceTips": []
}
]
}
]
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"exemptHouseholds": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 53. 自动汇总正式用车需求草稿(只读;草稿可原样 PUT) `GET /v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement/aggregate-draft`
**VO**: `GroupVehicleAggregateDraftRespVO`
#### 使用场景
自动汇总正式用车需求草稿(只读;草稿可原样 PUT)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.droppedFleetItems[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单ID(同层级对照) |
| data.droppedFleetItems | List<DroppedFleetItem> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.staleHeadcountOrders[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.staleHeadcountOrders | List<StaleHeadcountOrder> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.paddedOrderDays[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.paddedOrderDays | List<PaddedOrderDays> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.seatOptionAdjusted[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.seatOptionAdjusted | List<SeatOptionAdjusted> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.violations[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.violations | List<Violation> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.exemptHouseholds[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.exemptHouseholds | List<GroupVehicleExemptHouseholdVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/group-batch/1934567890123456701/vehicle-requirement/aggregate-draft
```
#### 响应示例
共 6 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"droppedFleetItems": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 54. 声明整团无需用车(零分组已确认,撤销走 withdraw) `POST /v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement/waive`
**VO**: `GroupVehicleRequirementRespVO`
#### 使用场景
声明整团无需用车(零分组已确认,撤销走 withdraw)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
| reason | Body | String | — | — | 免车原因(追加进整份备注留痕) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.exemptHouseholds[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单ID(同层级对照) |
| data.exemptHouseholds | List<GroupVehicleExemptHouseholdVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"reason": "纯自驾团,客户自理交通"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"exemptHouseholds": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 55. 整份撤回正式用车需求(退回草稿,已配车辆不动) `POST /v3/admin/order/group-batch/{groupBatchId}/vehicle-requirement/withdraw`
**VO**: `GroupVehicleRequirementRespVO`
#### 使用场景
整份撤回正式用车需求(退回草稿,已配车辆不动)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| groupBatchId | Path | Long | ✅ | 正整数 | 团期ID |
| reason | Body | String | — | — | 撤回原因(写入整份备注留痕) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.exemptHouseholds[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 子订单ID(同层级对照) |
| data.exemptHouseholds | List<GroupVehicleExemptHouseholdVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"reason": "人数有变,重新汇总"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"exemptHouseholds": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 56. 发票详情(完整申请明细,供上传弹窗/详情页) `GET /v3/admin/order/invoice/{id}`
**VO**: `AdminInvoiceDetailRespVO`
#### 使用场景
发票详情(完整申请明细,供上传弹窗/详情页)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | 发票 ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/invoice/1934567890123456701
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 57. 生成用餐信息(按订单产品快照生成空行,已有行不重复生成) `POST /v3/admin/order/meal-info/generate`
**VO**: `OrderMealInfoListRespVO`
#### 使用场景
生成用餐信息(按订单产品快照生成空行,已有行不重复生成)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Body | Long | — | — | 订单ID;正数;与 groupBatchId 必须且只能传一个 |
| groupBatchId | Body | Long | — | — | 团期ID;正数;与 orderId 必须且只能传一个 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 入参订单ID,没传为 null(同层级对照) |
| data.items[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.items | List<OrderMealInfoItemRespVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"orderId": "1934567890123456701",
"groupBatchId": "1934567890123456701"
}
```
#### 响应示例
共 2 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 58. 查询用餐信息列表(按订单 / 团期 / 未挂归属) `GET /v3/admin/order/meal-info/list`
**VO**: `OrderMealInfoListRespVO`
#### 使用场景
查询用餐信息列表(按订单 / 团期 / 未挂归属)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Query | Long | — | — | 订单ID;正数;与 groupBatchId 必须且只能传一个 |
| groupBatchId | Query | Long | — | — | 团期ID;正数;与 orderId 必须且只能传一个 |
| batchNo | Query | String | — | — | 团期编号精确匹配;最多 64 字符 |
| mealType | Query | String | — | — | 类别 |
| mealDateStart | Query | LocalDate | — | — | 用餐日期起(含),yyyy-MM-dd |
| mealDateEnd | Query | LocalDate | — | — | 用餐日期止(含),yyyy-MM-dd;同时传时须 ≥ mealDateStart |
| dayNumber | Query | Integer | — | — | 第几天;≥ 1 |
| settleType | Query | String | — | — | 付款方式 |
| keyword | Query | String | — | — | 关键字,最多 64 字符;模糊匹配餐厅名称、餐食名称 |
| limit | Query | Integer | — | — | 最大返回条数,默认 200;1–500 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 入参订单ID,没传为 null(同层级对照) |
| data.items[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.items | List<OrderMealInfoItemRespVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/meal-info/list?orderId=1934567890123456701&groupBatchId=1934567890123456701&batchNo=团期编号精确匹配;最多 64 字符&mealType=类别&mealDateStart=2026-07-05&mealDateEnd=2026-07-07
```
#### 响应示例
共 2 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 59. 重置用餐信息(删掉全部行后按快照重新生成空行) `POST /v3/admin/order/meal-info/reset`
**VO**: `OrderMealInfoListRespVO`
#### 使用场景
重置用餐信息(删掉全部行后按快照重新生成空行)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Body | Long | — | — | 订单ID;正数;与 groupBatchId 必须且只能传一个 |
| groupBatchId | Body | Long | — | — | 团期ID;正数;与 orderId 必须且只能传一个 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 入参订单ID,没传为 null(同层级对照) |
| data.items[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.items | List<OrderMealInfoItemRespVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"orderId": "1934567890123456701",
"groupBatchId": "1934567890123456701"
}
```
#### 响应示例
共 2 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 60. 保存用餐信息(整单一次保存:带行ID覆盖、不带新增、没传上来的软删) `POST /v3/admin/order/meal-info/save`
**VO**: `OrderMealInfoListRespVO`
#### 使用场景
保存用餐信息(整单一次保存:带行ID覆盖、不带新增、没传上来的软删)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Body | Long | — | — | 订单ID;正数;与 groupBatchId 必须且只能传一个 |
| groupBatchId | Body | Long | — | — | 团期ID;正数;与 orderId 必须且只能传一个 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 入参订单ID,没传为 null(同层级对照) |
| data.items[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.items | List<OrderMealInfoItemRespVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"orderId": "1934567890123456701",
"groupBatchId": "1934567890123456701"
}
```
#### 响应示例
共 2 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 61. 套用用餐模版(返回订单现有行 + 模版套出来的行,模版行接在后面,不改库) `POST /v3/admin/order/meal-template/apply`
**VO**: `OrderMealInfoListRespVO`
#### 使用场景
套用用餐模版(返回订单现有行 + 模版套出来的行,模版行接在后面,不改库)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Body | Long | — | — | 订单ID;正数;与 groupBatchId 必须且只能传一个 |
| groupBatchId | Body | Long | — | — | 团期ID;正数;与 orderId 必须且只能传一个 |
| templateId | Body | Long | — | — | 要套用的模版ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 入参订单ID,没传为 null(同层级对照) |
| data.items[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.items | List<OrderMealInfoItemRespVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"orderId": "1934567890123456701",
"groupBatchId": "1934567890123456701",
"templateId": "1934567890123456701"
}
```
#### 响应示例
共 2 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 62. §2.5 房间分配查询(按家庭分组) `GET /v3/admin/order/orders/{orderId}/rooms`
**VO**: `OrderRoomsRespVO`
#### 使用场景
§2.5 房间分配查询(按家庭分组)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | 订单 ID |
| dayNumber | Query | Integer | — | — | dayNumber |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/orders/1934567890123456701/rooms?dayNumber=1
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 63. 受控推进单个订单状态(走状态机+写日志+联动房车日期,幂等) `POST /v3/admin/order/{id}/advance-state`
**VO**: `OrderAdvanceStateRespVO`
#### 使用场景
受控推进单个订单状态(走状态机+写日志+联动房车日期,幂等)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | id |
| targetStatus | Body | String | — | — | 目标粗状态(TRAVELLING / COMPLETED) |
| departDate | Body | LocalDate | — | — | 新出发日(与 returnDate 必须成对提供;不传则沿用订单现有日期做联动) |
| returnDate | Body | LocalDate | — | — | 新返程日(与 departDate 必须成对提供;tripDays 由两端日期派生) |
| normalizeAssignmentDates | Body | Boolean | — | — | 是否联动归一房/车派行日期到订单窗口(默认 true;false 时仅车侧做窗口校验、出窗直接报错,房侧完全跳过不动) |
| reason | Body | String | — | — | 操作原因(写入状态日志) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"targetStatus": "TRAVELLING",
"departDate": "2026-08-18",
"returnDate": "2026-08-20",
"normalizeAssignmentDates": "true",
"reason": "行程中终止测试前推进订单到出行中"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 64. 订单详情 - 发票 Tab `GET /v3/admin/order/{id}/invoices`
**VO**: `InvoiceVO`
#### 使用场景
订单详情 - 发票 Tab。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | 订单 ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/1934567890123456701/invoices
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": []
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 65. 查询 staff 配置列表 `GET /v3/admin/order/{id}/staff`
**VO**: `StaffAssignmentVO`
#### 使用场景
查询 staff 配置列表。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | 订单 ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/1934567890123456701/staff
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": []
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 66. 新增 staff 配置 `POST /v3/admin/order/{id}/staff`
**VO**: `StaffAssignmentVO`
#### 使用场景
新增 staff 配置。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | 订单 ID |
| staffId | Body | Long | — | — | 用户域员工 ID |
| staffRole | Body | String | — | — | 员工角色(LEADER / DRIVER / PHOTOGRAPHER / OTHER) |
| sortOrder | Body | Integer | — | — | 展示排序(默认 0) |
| remark | Body | String | — | — | 备注(≤500) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"staffId": "40001",
"staffRole": "LEADER",
"sortOrder": 0,
"remark": "首席领队,10 年经验"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": null
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 67. 编辑 staff 配置 `PUT /v3/admin/order/{id}/staff/{staffAssignmentId}`
**VO**: `StaffAssignmentVO`
#### 使用场景
编辑 staff 配置。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | 订单 ID |
| staffAssignmentId | Path | Long | ✅ | 正整数 | staff_assignment ID |
| staffId | Body | Long | — | — | 用户域员工 ID |
| staffRole | Body | String | — | — | 员工角色(LEADER / DRIVER / PHOTOGRAPHER / OTHER) |
| sortOrder | Body | Integer | — | — | 展示排序(默认 0) |
| remark | Body | String | — | — | 备注(≤500) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"staffId": "40001",
"staffRole": "LEADER",
"sortOrder": 0,
"remark": "首席领队,10 年经验"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": null
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 68. 设置 staff 报账人等级(核心订单) `PUT /v3/admin/order/{id}/staff/{staffAssignmentId}/reporter-rank`
**VO**: `StaffAssignmentVO`
#### 使用场景
设置 staff 报账人等级(核心订单)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | 订单 ID |
| staffAssignmentId | Path | Long | ✅ | 正整数 | staff_assignment ID |
| reporterRank | Body | ReporterRank | — | — | 报账人等级(PRIMARY=主报账人 / SECONDARY=次报账人 / NONE=非报账人) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"reporterRank": null
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 69. 终止行程·退款预览(出行中) `POST /v3/admin/order/{id}/terminate/refund-preview`
**VO**: `OrderTerminateRefundPreviewRespVO`
#### 使用场景
终止行程·退款预览(出行中)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | 订单 ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderNo | String | 订单号(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
POST /v3/admin/order/1934567890123456701/terminate/refund-preview
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderNo": "订单号",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 70. 大交通批次新增 `POST /v3/admin/order/{id}/transport-plan/add`
**VO**: `TransportPlanVO`
#### 使用场景
大交通批次新增。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | 订单 ID |
| direction | Body | String | — | — | 方向:ARRIVAL / DEPARTURE |
| transportType | Body | String | — | — | 交通类型:FLIGHT / TRAIN / SELF_DRIVE |
| transportNo | Body | String | — | — | 航班号 / 车次号;SELF_DRIVE 时为空 |
| carrier | Body | String | — | — | 航司 / 铁路公司 |
| departStation | Body | String | — | — | 出发站 |
| arriveStation | Body | String | — | — | 到达站 |
| departTime | Body | LocalDateTime | — | — | 出发时间(FLIGHT/TRAIN 必填) |
| arriveTime | Body | LocalDateTime | — | — | 到达时间(FLIGHT/TRAIN 必填) |
| selfDrivePeriod | Body | String | — | — | 自驾时段(仅 SELF_DRIVE):MORNING / AFTERNOON / EVENING |
| selfDriveEta | Body | LocalDateTime | — | — | 自驾预计到达时间(仅 SELF_DRIVE 可选) |
| travelerIds | Body | List<Long> | — | — | 关联出行人 ID(至少 1 个) |
| pickupRequired | Body | Boolean | — | — | 是否需要接送;新增缺省为 true,编辑缺省保留原值 |
| pickupRemark | Body | String | — | — | 接送备注 |
| remark | Body | String | — | — | 备注(≤500) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
此处仅示例前 10 个字段,完整字段见入参表。
```json
{
"direction": "ARRIVAL",
"transportType": "FLIGHT",
"transportNo": "CA1234",
"carrier": "中国国际航空",
"departStation": "北京首都T3",
"arriveStation": "长春龙嘉",
"departTime": "2026-06-01T08:30:00",
"arriveTime": "2026-06-01T10:15:00",
"selfDrivePeriod": "AFTERNOON",
"selfDriveEta": "2026-06-05T15:00:00"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": null
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 71. 大交通批次批量替换 `POST /v3/admin/order/{id}/transport-plan/batch`
**VO**: `TransportPlanBatchRespVO`
#### 使用场景
大交通批次批量替换。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | 订单 ID |
| plans | Body | List<TransportPlanReqVO> | — | — | 交通批次列表(全量覆盖订单已有批次) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.plans[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
| data.plans | List<TransportPlanVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"plans": [
{
"direction": "ARRIVAL",
"transportType": "FLIGHT",
"transportNo": "CA1234",
"carrier": "中国国际航空",
"departStation": "北京首都T3",
"arriveStation": "长春龙嘉",
"departTime": "2026-06-01T08:30:00",
"arriveTime": "2026-06-01T10:15:00",
"selfDrivePeriod": "AFTERNOON",
"selfDriveEta": "2026-06-05T15:00:00",
"travelerIds": [],
"pickupRequired": "true",
"pickupRemark": "需在 T3 出口举牌接机",
"remark": "需要接机举牌"
}
]
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"plans": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"plans": [
{
"orderId": "1934567890123456701",
"teamNo": null
}
]
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 72. 大交通批次列表 `GET /v3/admin/order/{id}/transport-plan/list`
**VO**: `TransportPlanListRespVO`
#### 使用场景
大交通批次列表。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | 订单 ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
| data.arrivals[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.arrivals | List<TransportPlanVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
| data.departures[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.departures | List<TransportPlanVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/1934567890123456701/transport-plan/list
```
#### 响应示例
共 3 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 73. 大交通批次编辑 `POST /v3/admin/order/{id}/transport-plan/{planId}/edit`
**VO**: `TransportPlanVO`
#### 使用场景
大交通批次编辑。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | 订单 ID |
| planId | Path | Long | ✅ | 正整数 | 批次 ID |
| direction | Body | String | — | — | 方向:ARRIVAL / DEPARTURE |
| transportType | Body | String | — | — | 交通类型:FLIGHT / TRAIN / SELF_DRIVE |
| transportNo | Body | String | — | — | 航班号 / 车次号;SELF_DRIVE 时为空 |
| carrier | Body | String | — | — | 航司 / 铁路公司 |
| departStation | Body | String | — | — | 出发站 |
| arriveStation | Body | String | — | — | 到达站 |
| departTime | Body | LocalDateTime | — | — | 出发时间(FLIGHT/TRAIN 必填) |
| arriveTime | Body | LocalDateTime | — | — | 到达时间(FLIGHT/TRAIN 必填) |
| selfDrivePeriod | Body | String | — | — | 自驾时段(仅 SELF_DRIVE):MORNING / AFTERNOON / EVENING |
| selfDriveEta | Body | LocalDateTime | — | — | 自驾预计到达时间(仅 SELF_DRIVE 可选) |
| travelerIds | Body | List<Long> | — | — | 关联出行人 ID(至少 1 个) |
| pickupRequired | Body | Boolean | — | — | 是否需要接送;新增缺省为 true,编辑缺省保留原值 |
| pickupRemark | Body | String | — | — | 接送备注 |
| remark | Body | String | — | — | 备注(≤500) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
此处仅示例前 10 个字段,完整字段见入参表。
```json
{
"direction": "ARRIVAL",
"transportType": "FLIGHT",
"transportNo": "CA1234",
"carrier": "中国国际航空",
"departStation": "北京首都T3",
"arriveStation": "长春龙嘉",
"departTime": "2026-06-01T08:30:00",
"arriveTime": "2026-06-01T10:15:00",
"selfDrivePeriod": "AFTERNOON",
"selfDriveEta": "2026-06-05T15:00:00"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": null
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 74. 单个出行人新增 `POST /v3/admin/order/{id}/traveler/add`
**VO**: `TravelerVO`
#### 使用场景
单个出行人新增。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | 订单 ID |
| name | Body | String | — | — | 姓名(可后填) |
| gender | Body | String | — | — | 性别:1=男 / 2=女 / 0=未知 |
| birthday | Body | LocalDate | — | — | 出生日期(必填,后端按年龄分段自动派生出行人类型) |
| idType | Body | String | — | — | 证件类型(取值见数据字典 id_card_type) |
| idNo | Body | String | — | — | 证件号(明文传,DB 加密) |
| nationality | Body | String | — | — | 国籍(默认中国) |
| race | Body | String | — | — | 民族(默认汉族) |
| phone | Body | String | — | — | 出行人手机(明文传,DB 加密) |
| emergencyContact | Body | String | — | — | 紧急联系人姓名 |
| emergencyPhone | Body | String | — | — | 紧急联系人电话(明文传) |
| roomGroupNo | Body | Integer | — | — | 同住分组号 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
此处仅示例前 10 个字段,完整字段见入参表。
```json
{
"name": "王小明",
"gender": "1",
"birthday": "2018-06-20",
"idType": "ID_CARD",
"idNo": "220103201806201234",
"nationality": "中国",
"race": "汉族",
"phone": "13812342046",
"emergencyContact": "王大明",
"emergencyPhone": "13988888888"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 75. 出行人列表 `GET /v3/admin/order/{id}/traveler/list`
**VO**: `TravelerVO`
#### 使用场景
出行人列表。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | 订单 ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/1934567890123456701/traveler/list
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": []
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 76. 订单增减项(统一端点,按 direction 分流) `POST /v3/admin/order/{orderId}/adjustment`
**VO**: `OrderAdjustmentRespVO`
#### 使用场景
订单增减项(统一端点,按 direction 分流)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | 订单 ID |
| direction | Body | AdjustmentDirection | — | — | 增减方向:REDUCE=减项/优惠,ADD=增项/附加费 |
| itemCode | Body | String | — | — | 项目 itemCode:REDUCE 时取 order_discount_item 字典 value,ADD 时取 order_surcharge_item 字典 value |
| amount | Body | BigDecimal | — | — | 金额(元),必须 > 0 |
| remark | Body | String | — | — | 备注(≤500 字) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"direction": null,
"itemCode": "OLD_CUSTOMER",
"amount": "200.00",
"remark": "春节活动老客户优惠"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 77. 创建预支(创建即待审批) `POST /v3/admin/order/{orderId}/advance`
**VO**: `OrderAdvanceRespVO`
#### 使用场景
创建预支(创建即待审批)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | 订单ID |
| payeeStaffId | Body | Long | — | — | 借款对象(必填,取候选下拉的 id=assignmentId) |
| advanceType | Body | String | — | — | 预支借款类型(必填,取字典 advance_type 的 dictValue) |
| amount | Body | BigDecimal | — | — | 预支金额(必填,必须大于0) |
| purpose | Body | String | — | — | 用途说明(可选) |
| voucherUrl | Body | String | — | — | 凭证文件URL(可选) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"payeeStaffId": "1934567890123456701",
"advanceType": "预支借款类型",
"amount": "1000.00",
"purpose": "用途说明",
"voucherUrl": "凭证文件URL"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 78. 分页查询本单预支列表 `GET /v3/admin/order/{orderId}/advances`
**VO**: `OrderAdvanceRespVO`
#### 使用场景
分页查询本单预支列表。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | 订单ID |
| page | Query | Integer | — | 默认 1 | 页码 |
| pageSize | Query | Integer | — | 默认 20 | 每页条数 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.records[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/1934567890123456701/advances?page=1&pageSize=1
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": []
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 79. 查询订单优惠+附加费清单 `GET /v3/admin/order/{orderId}/discount-surcharge/list`
**VO**: `OrderDiscountSurchargeListRespVO`
#### 使用场景
查询订单优惠+附加费清单。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | 订单 ID |
| includeReversed | Query | Boolean | — | — | includeReversed |
| category | Query | String | — | — | category |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/1934567890123456701/discount-surcharge/list?includeReversed=True&category=category
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 80. 新增订单优惠(已废弃,改调 /adjustment) `POST /v3/admin/order/{orderId}/discounts`
**VO**: `OrderDiscountRespVO`
#### 使用场景
新增订单优惠(已废弃,改调 /adjustment)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | 订单 ID |
| discountType | Body | String | — | — | 优惠类型(EARLY_BIRD/VIP/MANUAL/ROOM_DOWNGRADE/VEHICLE_DOWNGRADE/OTHER,REVERSAL 禁手填) |
| discountName | Body | String | — | — | 优惠描述(前端展示用,≤128 字) |
| discountAmount | Body | BigDecimal | — | — | 优惠金额,单位元,必须 > 0 |
| sourceType | Body | String | — | — | 来源类型(MANUAL/ROOM_ASSIGN/VEHICLE_ASSIGN/ITINERARY_EDIT/EARLY_BIRD_PLAN,默认 MANUAL) |
| sourceRefId | Body | Long | — | — | 来源关联 ID(MANUAL 时为 null,其他类型必填) |
| remark | Body | String | — | — | 备注(≤500 字) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"discountType": "MANUAL",
"discountName": "老客户回馈减免 200",
"discountAmount": "200.00",
"sourceType": "MANUAL",
"sourceRefId": "null",
"remark": "备注"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 81. 定制师代客申请发票(须订单已完成) `POST /v3/admin/order/{orderId}/invoice/apply`
**VO**: `AdminInvoiceApplyRespVO`
#### 使用场景
定制师代客申请发票(须订单已完成)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | 订单 ID |
| invoiceType | Body | String | — | — | 发票类型:VAT_NORMAL(增值税普通发票)/ VAT_SPECIAL(增值税专用发票)。增值税专用发票只能开给单位(COMPANY) |
| titleType | Body | String | — | — | 抬头类型:COMPANY / PERSONAL。增值税专用发票只能开给单位(COMPANY) |
| titleName | Body | String | — | — | 抬头名称(公司全称或个人姓名) |
| taxNo | Body | String | — | — | 税号(titleType=COMPANY 必填;invoiceType=VAT_SPECIAL 必填) |
| bankName | Body | String | — | — | 开户行(invoiceType=VAT_SPECIAL 必填) |
| bankAccount | Body | String | — | — | 开户账号(invoiceType=VAT_SPECIAL 必填) |
| registAddress | Body | String | — | — | 注册地址(invoiceType=VAT_SPECIAL 必填) |
| registPhone | Body | String | — | — | 注册电话(invoiceType=VAT_SPECIAL 必填) |
| email | Body | String | — | — | 收件邮箱(必填) |
| remark | Body | String | — | — | 备注 / 货物或应税劳务名称(可选) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"invoiceType": "COMPANY",
"titleType": "COMPANY",
"titleName": "抬头名称",
"taxNo": "税号",
"bankName": "开户行",
"bankAccount": "开户账号",
"registAddress": "注册地址",
"registPhone": "注册电话",
"email": "收件邮箱",
"remark": "备注 / 货物或应税劳务名称"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 82. 生成电子行程单数据(对客) `GET /v3/admin/order/{orderId}/itinerary-document`
**VO**: `OrderItineraryDocumentVO`
#### 使用场景
生成电子行程单数据(对客)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | 订单 ID |
| documentType | Query | String | ✅ | — | 文档类型(对客视角):CUSTOMER / CUSTOMER_PRINT / CUSTOMER_QUOTE |
| includeResourceDetail | Query | Boolean | — | — | includeResourceDetail |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.header.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderNo | String | 订单号(同层级对照) |
| data.header | HeaderVO | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/1934567890123456701/itinerary-document?documentType=文档类型&includeResourceDetail=True
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"header": {
"orderNo": "订单号",
"teamNo": "26-0480"
}
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 83. 查询订单完整行程(含全部实配嵌套,已真实化 Issue #2471) `GET /v3/admin/order/{orderId}/itinerary/full`
**VO**: `OrderItineraryRespVO`
#### 使用场景
查询订单完整行程(含全部实配嵌套,已真实化 Issue #2471)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | 订单 ID |
| dayNumber | Query | Integer | — | — | 仅返回指定某天(不传=全返) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/1934567890123456701/itinerary/full?dayNumber=1
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 84. 查询订单线下收款列表(含已撤销行,审计溯源用) `GET /v3/admin/order/{orderId}/payment/manual-receipt`
**VO**: `ManualReceiptVO`
#### 使用场景
查询订单线下收款列表(含已撤销行,审计溯源用)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | orderId |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/1934567890123456701/payment/manual-receipt
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": []
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 85. 登记线下收款(报账人收款/对公转账/定制师代收),同事务推进 paid_amount `POST /v3/admin/order/{orderId}/payment/manual-receipt`
**VO**: `ManualReceiptVO`
#### 使用场景
登记线下收款(报账人收款/对公转账/定制师代收),同事务推进 paid_amount。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | orderId |
| channel | Body | String | — | — | 收款渠道 DRIVER_CASH/BANK_TRANSFER/CONSULTANT_COLLECTION |
| payType | Body | String | — | — | 款项类型 DEPOSIT/BALANCE/FULL |
| amount | Body | BigDecimal | — | — | 收款金额(> 0) |
| receivedAt | Body | LocalDateTime | — | — | 收款时间(可为过去时间,不传默认当前时间) |
| transferRef | Body | String | — | — | 对公转账流水号(BANK_TRANSFER 渠道必填) |
| receiptMethod | Body | String | — | — | 收款方式(可选,字典 manual_receipt_method,当前暂不校验) |
| collectorStaffId | Body | Long | — | — | 代收人 assignmentId(DRIVER_CASH 必填,属本单报账人) |
| collectorType | Body | String | — | — | 实际代收人类型 ORDER_STAFF/CONSULTANT/COMPANY_ACCOUNT;不传时按 channel 兼容推导 |
| voucherUrls | Body | List<String> | — | — | 凭证图片 URL 列表 |
| remark | Body | String | — | — | 备注(最长 500 字) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"channel": "DRIVER_CASH",
"payType": "BALANCE",
"amount": "5000.00",
"receivedAt": "2026-07-05T14:30:00",
"transferRef": "GZL20260705001",
"receiptMethod": "WECHAT_TRANSFER",
"collectorStaffId": "123456789",
"collectorType": "ORDER_STAFF",
"voucherUrls": [],
"remark": "客户现场支付尾款"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 86. 撤销线下收款(同事务回退 paid_amount,行保留可追溯) `DELETE /v3/admin/order/{orderId}/payment/manual-receipt/{receiptId}`
**VO**: `ManualReceiptVO`
#### 使用场景
撤销线下收款(同事务回退 paid_amount,行保留可追溯)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | orderId |
| receiptId | Path | Long | ✅ | 正整数 | receiptId |
| voidReason | Body | String | — | — | 撤销原因(建议填写) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"voidReason": "客户实际未支付,误录"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 87. 财务复核确认结算 `POST /v3/admin/order/{orderId}/settlement/confirm`
**VO**: `ConfirmSettlementRespVO`
#### 使用场景
财务复核确认结算。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | 订单 ID |
| confirmRemark | Body | String | — | — | 复核备注(可选) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"confirmRemark": "核对无误,确认结算"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 88. 管理员反确认核单终态快照 `POST /v3/admin/order/{orderId}/settlement/final-snapshots/reopen`
**VO**: `SettlementReopenRespVO`
#### 使用场景
管理员反确认核单终态快照。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | orderId |
| expectedSnapshotId | Body | Long | — | — | 前端当前看到的终态快照 ID |
| expectedVersionNo | Body | Integer | — | — | 前端当前看到的终态快照版本号 |
| reason | Body | String | — | — | 反确认原因 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"expectedSnapshotId": "9600000000001",
"expectedVersionNo": 1,
"reason": "补录车辆费用凭证"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 89. 完成核单 `POST /v3/admin/order/{orderId}/settlement/finalize`
**VO**: `SettlementSubmitRespVO`
#### 使用场景
完成核单。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | orderId |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
POST /v3/admin/order/1934567890123456701/settlement/finalize
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 90. 查询核单操作日志 `GET /v3/admin/order/{orderId}/settlement/logs`
**VO**: `RecordVO`
#### 使用场景
查询核单操作日志。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | 订单 ID |
| page | Query | Integer | — | — | 页码 |
| pageSize | Query | Integer | — | — | 每页条数 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.records[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/{orderId}/settlement/logs?page=1&pageSize=20
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": []
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 91. 查询车辆核单草稿 `GET /v3/admin/order/{orderId}/settlement/step3/vehicles`
**VO**: `SettlementVehicleFeesRespVO`
#### 使用场景
查询车辆核单草稿。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | orderId |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单ID;JSON按字符串序列化,避免JavaScript精度丢失(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/1934567890123456701/settlement/step3/vehicles
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 92. 全量保存车辆核单草稿 `PUT /v3/admin/order/{orderId}/settlement/step3/vehicles`
**VO**: `SettlementVehicleFeesRespVO`
#### 使用场景
全量保存车辆核单草稿。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | orderId |
| items | Body | List<SettlementVehicleFeeSaveItemReqVO> | — | — | 全量明细 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单ID;JSON按字符串序列化,避免JavaScript精度丢失(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"items": [
{
"id": "1934567890123456701",
"sourceType": "sourceType",
"requirementKind": "需求归属类别",
"serviceDate": "2026-09-27",
"vehicleId": "1934567890123456701",
"vehiclePlate": "vehiclePlate",
"vehicleModelId": "1934567890123456701",
"vehicleModelName": "vehicleModelName",
"driverId": "1934567890123456701",
"driverName": "driverName",
"amount": "1000.00",
"paymentMethod": "paymentMethod",
"settlementConfirmStatus": "settlementConfirmStatus",
"remark": "remark"
}
]
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 93. 查核单汇总快照 `GET /v3/admin/order/{orderId}/settlement/summary`
**VO**: `SettlementSummaryRespVO`
#### 使用场景
查核单汇总快照。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | 订单 ID |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
| data.advanceSummary.records[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| data.advanceSummary.records | List<OrderAdvanceRespVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/order/1934567890123456701/settlement/summary
```
#### 响应示例
共 2 处新增 `teamNo`(路径见出参表),此处仅展示其一,其余同构。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 94. 新增订单附加费(已废弃,改调 /adjustment) `POST /v3/admin/order/{orderId}/surcharges`
**VO**: `OrderSurchargeRespVO`
#### 使用场景
新增订单附加费(已废弃,改调 /adjustment)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | 订单 ID |
| surchargeName | Body | String | — | — | 附加费描述(≤128 字) |
| surchargeAmount | Body | BigDecimal | — | — | 附加费金额,单位元,必须 > 0 |
| sourceType | Body | String | — | — | 来源类型(MANUAL/ROOM_ASSIGN/VEHICLE_ASSIGN/ITINERARY_EDIT/SCENIC_ASSIGNMENT/ACTIVITY_ASSIGNMENT,REVERSAL 禁手填) |
| sourceRefId | Body | Long | — | — | 来源关联 ID(MANUAL 时为 null,其他类型必填) |
| remark | Body | String | — | — | 备注(≤500 字) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"surchargeName": "加项景点:羊卓雍措一日游",
"surchargeAmount": "240.00",
"sourceType": "ITINERARY_EDIT",
"sourceRefId": "6601234567905",
"remark": "备注"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 95. 增订单标签 `POST /v3/admin/order/{orderId}/tag`
**VO**: `OrderTagVO`
#### 使用场景
增订单标签。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | 订单 ID |
| tagName | Body | String | — | — | 标签名(≤50 字,禁前后空格/禁特殊符号) |
| tagColor | Body | String | — | — | 前端展示色值,如 #FF6B6B;不传走系统默认色 #5B8FF9 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 关联订单 ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"tagName": "标签名",
"tagColor": "前端展示色值,如 #FF6B6B;不传走"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 96. 分页查询退款申诉 `GET /v3/admin/refund/appeal/page`
**VO**: `AppealAdminRespVO`
#### 使用场景
分页查询退款申诉。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| page | Query | Integer | — | — | 页码(从1开始) |
| pageSize | Query | Integer | — | — | 每页条数 |
| orderId | Query | Long | — | — | 订单ID精确匹配 |
| appealType | Query | String | — | — | 申诉类型(REFUND_REJECTED/REFUND_AMOUNT_DISPUTE) |
| appealStatus | Query | String | — | — | 申诉状态(PENDING/REJECTED/REFUNDED/WITHDRAWN) |
| applicantName | Query | String | — | — | 申请人姓名(模糊匹配) |
| createTimeStart | Query | LocalDateTime | — | — | 创建时间起 |
| createTimeEnd | Query | LocalDateTime | — | — | 创建时间止 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.records[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/refund/appeal/page?page=1&pageSize=1&orderId=1934567890123456701&appealType=REFUND_REJECTED&appealStatus=PENDING&applicantName=申请人姓名
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": []
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 97. 查询申诉详情(管理端) `GET /v3/admin/refund/appeal/{id}`
**VO**: `AppealAdminRespVO`
#### 使用场景
查询申诉详情(管理端)。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | id |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/refund/appeal/1934567890123456701
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 98. 客服代下退款申请 `POST /v3/admin/refund/application`
**VO**: `RefundApplicationDetailRespVO`
#### 使用场景
客服代下退款申请。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Body | Long | — | — | 订单ID |
| refundType | Body | String | — | — | 退款类型:FULL/PARTIAL(默认 FULL) |
| reasonId | Body | Long | — | — | 退款原因ID |
| reasonText | Body | String | — | — | 退款原因文本(当选择了原因ID时自动填充) |
| reasonDetail | Body | String | — | — | 退款原因详情/备注 |
| policyId | Body | Long | — | — | 退款政策ID(NULL=不按政策) |
| departureDate | Body | LocalDate | — | — | 出发日期(按政策计算时必填) |
| paidAmount | Body | BigDecimal | — | — | 已付金额(快照) |
| requestedAmount | Body | BigDecimal | — | — | 申请退款金额(PARTIAL 必填) |
| mediaTraceIds | Body | java.util.List<String> | — | — | 媒体 traceIds(wx 内容安全机审用) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.records[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| refundId | Long | 退款记录ID(同层级对照) |
| data.records | List<RecordItemVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"orderId": "1234567890123456789",
"refundType": "FULL",
"reasonId": "1934567890123456701",
"reasonText": "退款原因文本",
"reasonDetail": "退款原因详情/备注",
"policyId": "1934567890123456701",
"departureDate": "2026-07-01",
"paidAmount": "1000.00",
"requestedAmount": "500.00",
"mediaTraceIds": null
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": [
{
"refundId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 99. 手动完成退款 `PUT /v3/admin/refund/application/{applicationId}/complete`
**VO**: `RefundApplicationDetailRespVO`
#### 使用场景
手动完成退款。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| applicationId | Path | Long | ✅ | 正整数 | applicationId |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.records[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| refundId | Long | 退款记录ID(同层级对照) |
| data.records | List<RecordItemVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
PUT /v3/admin/refund/application/1934567890123456701/complete
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": [
{
"refundId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 100. 退款申请详情 `GET /v3/admin/refund/application/{id}`
**VO**: `RefundApplicationDetailRespVO`
#### 使用场景
退款申请详情。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| id | Path | Long | ✅ | 正整数 | id |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.records[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| refundId | Long | 退款记录ID(同层级对照) |
| data.records | List<RecordItemVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/refund/application/1934567890123456701
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": [
{
"refundId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 101. 触发实退 `POST /v3/admin/refund/execute/{appId}`
**VO**: `RefundApplicationDetailRespVO`
#### 使用场景
触发实退。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| appId | Path | Long | ✅ | 正整数 | appId |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.records[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| refundId | Long | 退款记录ID(同层级对照) |
| data.records | List<RecordItemVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
POST /v3/admin/refund/execute/1934567890123456701
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": [
{
"refundId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 102. 提交审核 `POST /v3/admin/refund/review`
**VO**: `RefundApplicationDetailRespVO`
#### 使用场景
提交审核。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| applicationId | Body | Long | — | — | 退款申请ID |
| decision | Body | String | — | — | 决议:APPROVED/REJECTED/PARTIAL |
| approvedAmount | Body | BigDecimal | — | — | 同意退款金额(PARTIAL 决议时必填,APPROVED 时选填) |
| remark | Body | String | — | — | 审核备注/驳回原因(REJECTED 时必填) |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.records[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| refundId | Long | 退款记录ID(同层级对照) |
| data.records | List<RecordItemVO> | 容器字段,结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"applicationId": "1234567890123456789",
"decision": "APPROVED",
"approvedAmount": "800.00",
"remark": "审核备注/驳回原因"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"records": [
{
"refundId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 103. 取消团队 `POST /v3/admin/team-report/cancel`
**VO**: `TeamReportRespVO`
#### 使用场景
取消团队。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Body | Long | — | — | 订单ID |
| cancelType | Body | Integer | — | — | 取消类别 0=游客个人原因 1=旅行社原因 2=不可抗因素 3=其他 |
| cancelDesc | Body | String | — | — | 取消原因说明 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 关联订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```json
{
"orderId": "1934567890123456701",
"cancelType": 1,
"cancelDesc": "取消原因说明"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": null
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 104. 暂存表单 `POST /v3/admin/team-report/save`
**VO**: `TeamReportRespVO`
#### 使用场景
暂存表单。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Body | Long | — | — | 订单ID |
| agencyCode | Body | String | — | — | 旅行社编码 hulai/qianshou/hulai-wenlu |
| businessType | Body | Integer | — | — | 业务类型 2=国内游组团 6=入境接待 7=国内接待 |
| agencyName | Body | String | — | — | 旅行社名称 |
| agencyLicense | Body | String | — | — | 经营许可证号 |
| itineraryName | Body | String | — | — | 线路名称 |
| teamId | Body | String | — | — | 团号 |
| dateGo | Body | String | — | — | 出发日期 yyyy-MM-dd |
| timeGoHour | Body | String | — | — | 出发时间 HH |
| timeGoMinute | Body | String | — | — | 出发时间 mm |
| dateBack | Body | String | — | — | 返回日期 yyyy-MM-dd |
| timeBackHour | Body | String | — | — | 返回时间 HH |
| timeBackMinute | Body | String | — | — | 返回时间 mm |
| sourceCity | Body | String | — | — | 出发城市 |
| sourceProvince | Body | String | — | — | 出发省份 |
| destinationCity | Body | String | — | — | 前往城市 |
| destinationProvince | Body | String | — | — | 前往省份 |
| itineraryDay | Body | Integer | — | — | 天数 |
| vehicle | Body | Integer | — | — | 出发交通 1=飞机 2=火车 3=轮船 4=汽车 5=其它 |
| vehicleIn | Body | Integer | — | — | 返回交通 1=飞机 2=火车 3=轮船 4=汽车 5=其它 |
| vehicleOutNums | Body | String | — | — | 出发班次/车次 |
| vehicleInNums | Body | String | — | — | 返回班次/车次 |
| nativeTravelAgency | Body | String | — | — | 地接社名称 |
| teamType | Body | Integer | — | — | 团队类型 1=自组自接 2=包机 3=专列 4=其他 |
| peopleNums | Body | Integer | — | — | 团队人数 |
| childNums | Body | Integer | — | — | 儿童人数 |
| journeyDesc | Body | String | — | — | 行程总描述 |
| applicantName | Body | String | — | — | 申请人姓名 |
| applicantPhone | Body | String | — | — | 申请人电话 |
| guides | Body | List<GuideInfo> | — | — | 导游列表 |
| busInfo | Body | List<BusInfo> | — | — | 车队列表 |
| itineraryList | Body | List<ItineraryItem> | — | — | 行程列表(按天按站点) |
| touristList | Body | List<TouristInfo> | — | — | 游客列表 |
| agencyOptions | Body | List<AgencyOption> | — | — | agencyOptions |
| businessTypeOptions | Body | List<BusinessTypeOption> | — | — | businessTypeOptions |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 关联订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
此处仅示例前 10 个字段,完整字段见入参表。
```json
{
"orderId": "1934567890123456701",
"agencyCode": "旅行社编码 hulai/qianshou",
"businessType": 1,
"agencyName": "旅行社名称",
"agencyLicense": "经营许可证号",
"itineraryName": "线路名称",
"teamId": "团号",
"dateGo": "出发日期 yyyy-MM-dd",
"timeGoHour": "出发时间 HH",
"timeGoMinute": "出发时间 mm"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": null
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 105. 查询审核状态 `GET /v3/admin/team-report/status/{orderId}`
**VO**: `TeamReportRespVO`
#### 使用场景
查询审核状态。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | orderId |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 关联订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/team-report/status/1934567890123456701
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": null
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 106. 提交到12301平台 `POST /v3/admin/team-report/submit`
**VO**: `TeamReportRespVO`
#### 使用场景
提交到12301平台。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Body | Long | — | — | 订单ID |
| agencyCode | Body | String | — | — | 旅行社编码 hulai/qianshou/hulai-wenlu |
| businessType | Body | Integer | — | — | 业务类型 2=国内游组团 6=入境接待 7=国内接待 |
| agencyName | Body | String | — | — | 旅行社名称 |
| agencyLicense | Body | String | — | — | 经营许可证号 |
| itineraryName | Body | String | — | — | 线路名称 |
| teamId | Body | String | — | — | 团号 |
| dateGo | Body | String | — | — | 出发日期 yyyy-MM-dd |
| timeGoHour | Body | String | — | — | 出发时间 HH |
| timeGoMinute | Body | String | — | — | 出发时间 mm |
| dateBack | Body | String | — | — | 返回日期 yyyy-MM-dd |
| timeBackHour | Body | String | — | — | 返回时间 HH |
| timeBackMinute | Body | String | — | — | 返回时间 mm |
| sourceCity | Body | String | — | — | 出发城市 |
| sourceProvince | Body | String | — | — | 出发省份 |
| destinationCity | Body | String | — | — | 前往城市 |
| destinationProvince | Body | String | — | — | 前往省份 |
| itineraryDay | Body | Integer | — | — | 天数 |
| vehicle | Body | Integer | — | — | 出发交通 1=飞机 2=火车 3=轮船 4=汽车 5=其它 |
| vehicleIn | Body | Integer | — | — | 返回交通 1=飞机 2=火车 3=轮船 4=汽车 5=其它 |
| vehicleOutNums | Body | String | — | — | 出发班次/车次 |
| vehicleInNums | Body | String | — | — | 返回班次/车次 |
| nativeTravelAgency | Body | String | — | — | 地接社名称 |
| teamType | Body | Integer | — | — | 团队类型 1=自组自接 2=包机 3=专列 4=其他 |
| peopleNums | Body | Integer | — | — | 团队人数 |
| childNums | Body | Integer | — | — | 儿童人数 |
| journeyDesc | Body | String | — | — | 行程总描述 |
| applicantName | Body | String | — | — | 申请人姓名 |
| applicantPhone | Body | String | — | — | 申请人电话 |
| guides | Body | List<GuideInfo> | — | — | 导游列表 |
| busInfo | Body | List<BusInfo> | — | — | 车队列表 |
| itineraryList | Body | List<ItineraryItem> | — | — | 行程列表(按天按站点) |
| touristList | Body | List<TouristInfo> | — | — | 游客列表 |
| agencyOptions | Body | List<AgencyOption> | — | — | agencyOptions |
| businessTypeOptions | Body | List<BusinessTypeOption> | — | — | businessTypeOptions |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 关联订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
此处仅示例前 10 个字段,完整字段见入参表。
```json
{
"orderId": "1934567890123456701",
"agencyCode": "旅行社编码 hulai/qianshou",
"businessType": 1,
"agencyName": "旅行社名称",
"agencyLicense": "经营许可证号",
"itineraryName": "线路名称",
"teamId": "团号",
"dateGo": "出发日期 yyyy-MM-dd",
"timeGoHour": "出发时间 HH",
"timeGoMinute": "出发时间 mm"
}
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
查询失败静默降为 `null`,不影响其余字段、不回滚已提交的写操作;未付款/未生成团号同样为 `null`。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": null
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
- 本端点团号查询走静默降级:查失败不影响其余字段返回、不回滚已提交的写操作。
---
### 107. 获取上报记录 `GET /v3/admin/team-report/{orderId}`
**VO**: `TeamReportRespVO`
#### 使用场景
获取上报记录。响应新增只读字段 `teamNo`(团号),前端可直接展示,无需再查。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| orderId | Path | Long | ✅ | 正整数 | orderId |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.teamNo | String | **新增**:团号(为 `null` 见「降级响应」) |
| orderId | Long | 关联订单ID(同层级对照) |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /v3/admin/team-report/1934567890123456701
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
}
```
#### 空数据 / 降级响应
未付款/未生成团号时为 `null`;严格查询,失败直接报错(不吞掉),不影响其余字段返回。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": null
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- `teamNo` 格式 `yy-NNNN`(如 `26-0480`),订单确认生成团号后写入一次,之后不再变更。
- `teamNo` 为只读字段,本次改动不新增入参、不改变校验/错误码/鉴权规则。
---
### 108. 工作台仪表盘(角色分发,支持时间范围) `GET /admin/profile/dashboard`
**VO**: `DashboardRoleRespVO`
#### 使用场景
根据当前管理员角色返回不同的仪表盘数据(SUPER_ADMIN/ADMIN/未知角色走全局概览,CUSTOMIZER 走定制师工作台)。本次改动:仪表盘中的「即将出行」列表新增 `teamNo`(团号)只读字段,来源于 order-v3。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| period | Query | String | — | 默认 `today` | 时间范围:today/week/month |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.upcomingTrips[].teamNo | String | **新增**:团号(格式 `yy-NNNN`,未生成团号时为 `null`) |
| data.upcomingTrips[].orderId | Long | 订单 ID(对照,供前端按同层级关联 teamNo 与订单) |
| data.upcomingTrips | List\<DashboardUpcomingTripVO\> | teamNo 所在的容器字段,内部结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /admin/profile/dashboard?period=today
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"upcomingTrips": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
订单未付款、尚未生成团号时 `teamNo` 为 `null`;user-service 本次零改动,该字段透传自 order-v3 内部接口 `GET /internal/order/dashboard/upcoming-trips`,其降级语义见该接口所在的 changelog。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"upcomingTrips": [
{
"orderId": "1934567890123456701",
"teamNo": null
}
]
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- 只有 SUPER_ADMIN、ADMIN、default 分支(走 `AdminDashboardService`)以及 CUSTOMIZER(走 `DesignerDashboardService`)的响应会带 `upcomingTrips`;ROOM_MANAGER、VEHICLE_MANAGER、FINANCE、MATERIAL_ADMIN 走的是其他数据源,响应体中不含该字段。
- `data.upcomingTrips[].teamNo` 字段早已存在于契约中,本次只是开始有值(改前恒为 `null`)。
- user-service 本身零改动,该值随 order-v3 单独滚动部署即生效。
---
### 109. 工作台概览(已废弃,请使用 /admin/profile/dashboard) `GET /admin/designer/dashboard`
**VO**: `DesignerDashboardVO`
#### 使用场景
已废弃接口,行为固定按 CUSTOMIZER 角色、period=today 返回。本次改动:仪表盘中的「即将出行」列表新增 `teamNo`(团号)只读字段,来源于 order-v3。
#### 入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| (无) | — | — | — | — | 本接口无入参,角色/时间范围固定 |
#### 出参
| 字段 | 类型 | 说明 |
|------|------|------|
| data.upcomingTrips[].teamNo | String | **新增**:团号(格式 `yy-NNNN`,未生成团号时为 `null`) |
| data.upcomingTrips[].orderId | Long | 订单 ID(对照,供前端按同层级关联 teamNo 与订单) |
| data.upcomingTrips | List\<DashboardUpcomingTripVO\> | teamNo 所在的容器字段,内部结构不变,新增元素见上方 teamNo 行 |
其余字段不变,见原接口文档。
#### 请求示例
```http
GET /admin/designer/dashboard
```
#### 响应示例
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"upcomingTrips": [
{
"orderId": "1934567890123456701",
"teamNo": "26-0480"
}
]
}
}
```
#### 空数据 / 降级响应
订单未付款、尚未生成团号时 `teamNo` 为 `null`;user-service 本身零改动,该字段透传自 order-v3。
```json
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"upcomingTrips": [
{
"orderId": "1934567890123456701",
"teamNo": null
}
]
}
}
```
#### 错误响应
```json
{
"code": 500,
"message": "系统繁忙,请稍后重试或联系客服",
"success": false,
"data": null
}
```
#### 业务边界
- 本端点已废弃(`@Deprecated`),建议统一改用 `GET /admin/profile/dashboard`;两者行为一致,本字段无差异。
- `data.upcomingTrips[].teamNo` 字段早已存在于契约中,本次只是开始有值(改前恒为 `null`)。
---
## 四、契约约束与正确调用方式
> 本节只写**后端接受/拒绝 payload 的规则**,不写 UI 渲染建议。
- 本次改动**不引入任何新的入参字段**,所有请求体/路径/查询参数与改动前完全一致;调用方无需修改任何现有请求代码即可获得新字段。
- `teamNo` 是**只读**字段,后端忽略请求体中任何同名字段(本次也未在任何请求 VO 上新增该字段,前端传了也不会被读取)。
- `teamNo` 不参与任何现有排序/过滤逻辑;本次改动的 109 个接口没有新增按团号筛选的能力。
### ✅ 正确 / ❌ 错误 payload 对照
| 场景 | payload |
|------|---------|
| ✅ 请求体/参数保持改动前原样 | 与改动前完全一致 |
| ❌ 假设可通过请求体传入/覆盖 `teamNo` | 后端不读取,该字段始终由后端按订单团号计算得出 |
### 切换状态时的必要动作
无需任何前端联动动作;`teamNo` 是纯展示字段,不驱动任何状态切换逻辑。
---
## 五、数据库行为
本次改动**不新增、不修改任何数据库表结构**,`team_no` 列本身已存在于订单主表。109 个接口中的写操作(新增/驳回/确认/审核/结算等)本次改动**只在响应体组装阶段取团号**:手里已有订单的直接读,否则按订单 ID 批量查一次。不改变原有写入 SQL、不改变事务边界、不改变任何已有列的写入值。user-service 的 2 个出口零改动,字段随 order-v3 一起滚动即生效。
---
## 六、边界行为
- 未登录 → 401(网关拦截),与改动前一致。
- 资源不存在 → 与改动前相同的业务错误码。
- 订单未付款、尚未生成团号 → `teamNo` 为 `null`,不 500、不阻断页面渲染。
- 团号为空白 → `teamNo` 为 `null`,不返回空串,也不用订单号顶替。
- 老数据兼容:历史订单没有团号 → `teamNo` 为 `null`,不异常。
- 20 个写后出口(见各自「空数据 / 降级响应」标注)团号查询失败静默降级为 `null`,不回滚已提交的写操作;其余需要单独查团号的接口走严格查询,查询本身失败会如实报错,不会静默返回 `null`。
---
## 六.6、修改前后对比
### 字段级对比
| 字段 | 改前 | 改后 |
|------|------|------|
| `teamNo` | 不存在(user-service 2 个出口除外——那里字段早已声明,此前 order-v3 未填值) | 新增/开始有值,`String`,团号(格式 `yy-NNNN`),订单未生成团号时为 `null` |
### 行为级对比
| 行为 | 改前 | 改后 |
|------|------|------|
| 管理后台查看订单/房务/保险/团期相关详情或列表、工作台「即将出行」 | 无法直接拿到团号(或字段恒为 `null`) | 响应体直接携带有效 `teamNo`,无需额外查询 |
---
## 六.7、影响评估
- **是否破坏向后兼容**: 否——纯新增/纯赋值字段,不删除/不重命名/不改变既有字段类型。
- **前端是否必须同步上线**: 否——`teamNo` 是可选消费字段,不消费不影响现有页面功能;如需在页面展示团号才需要前端改动。
- **前端 workaround 清理点**: 若有页面此前按订单 ID 另查团号,可改为直接读响应里的 `teamNo`。
---
## 七、不影响范围
- **仅影响**: 管理后台(admin)上述 109 个接口的响应体,新增/补值只读字段 `teamNo`。
- **零影响**:
- 所有接口的入参、校验规则、错误码、鉴权规则
- C 端(mp)、内部(internal)接口(不在本文范围)
- 数据库表结构、既有列的写入逻辑
- 历史数据(存量订单无团号时字段为 `null`,不触发迁移/补数)
- user-service 自身代码(2 个出口零改动,字段透传自 order-v3)
---
## 八、测试环境已验证
- 部署:order-v3 以合并提交 `97b9754f2` 部署测试环境。
- 网关实测(2026-09-27),以下读数均与数据库 `order_main.team_no` 逐条比对:
- 团期户列表:50/50 一致。
- 首页看板:5/5 一致。
- 房务详情:2/2 一致。
- 管理端新建订单时 `team_no` 为 NULL;登记首笔线下收款后,响应 `teamNo` 为本次生成的团号,与库一致;收款列表中同一行也一致。
- 覆盖边界:其余接口由单测和响应字段门禁 `TeamNoResponseFieldGateTest` 覆盖,未逐个走网关。
---
## 十、相关文档
- 关联 Issue: [wx/HL#8408](https://git.1814.love:8443/wx/HL/issues/8408)
- 关联 PR: [wx/HL#8439](https://git.1814.love:8443/wx/HL/pulls/8439)、[wx/HL#8447](https://git.1814.love:8443/wx/HL/pulls/8447)
- 关联 changelog(PR #8419,fleet 侧同工单): `changelogs-v2/2026-09/27_8408_车务响应补团号-修改接口-管理后台.md`
## 关联 / 联系人
### 链接
- **Issue**: [#8408](https://git.1814.love:8443/wx/HL/issues/8408)
- **PR**: [#8439](https://git.1814.love:8443/wx/HL/pulls/8439)、[#8447](https://git.1814.love:8443/wx/HL/pulls/8447)
- **Merge commit**: [69046568c](https://git.1814.love:8443/wx/HL/commit/69046568c)、[97b9754f2](https://git.1814.love:8443/wx/HL/commit/97b9754f2)
### 联系人
- **后端负责人**: @wx