--- schema: "hl-changelog/v2" ticket: "8408" title: "订单管理后台响应体补团号字段" consumer: "admin" author: "wx(GIT)" change_type: "修改接口" backend_status: "deployed" gateway_status: "verified" frontend_status: "not_required" frontend_owner: "" frontend_ref: "" target_release: "" verified_at: "" status_note: "PR #8439(合并提交 69046568c)与 #8447(合并提交 97b9754f2)已合入 dev-v3,order-v3 已按 97b9754f2 部署测试环境。网关实测:团期户列表 50/50、首页看板 5/5、房务详情 2/2 的 teamNo 与库一致;管理端新建订单后登记首笔线下收款,响应 teamNo 为本次生成的团号,与库一致。其余接口由单测和响应字段门禁 TeamNoResponseFieldGateTest 覆盖,未逐个走网关。 前端实证(mmg 2026-09-28):纯增只读 teamNo,无「按订单ID另查团号」workaround(teamNo 已在退款/财务/车务/房务等直读响应字段),唯一具体消费(房务户级团号列)已由独立件 e3f8de23 交付;前端无需同步,判 not_required。" 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 | — | — | 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 | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.specialTags[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.specialTags | List | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.days[].households[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.days[].households | List | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.blockedHouseholds[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.blockedHouseholds | List | 容器字段,结构不变,新增元素见上方 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 | — | — | 人工分房行,与 clearPlanIds 至少一个非空;最多 500 行 | | clearPlanIds | Body | List | — | — | 这些计划行下的人工分房全部软删(回到纯自动分房),最多 200 条 | #### 出参 | 字段 | 类型 | 说明 | |------|------|------| | data.days[].shortage[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | orderId | Long | 子订单 ID(同层级对照) | | data.days[].shortage | List | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.days[].manualConflicts[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.days[].manualConflicts | List | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.days[].outOfRange[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.days[].outOfRange | List | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.warnings[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.warnings | List | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.days[].manualConflicts[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.days[].manualConflicts | List | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.days[].outOfRange[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.days[].outOfRange | List | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.warnings[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.warnings | List | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.outOfRangeOrders[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.outOfRangeOrders | List | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.householdsWithoutBasis[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.householdsWithoutBasis | List | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.outOfRangeHouseholds[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.outOfRangeHouseholds | List | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | — | — | 被保人列表(为空时后端按订单出行人自动填充;传了则以传入为准) | | 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 | — | — | 订单标签名列表(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 退单户;不传 = 两类都要 | | 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.allocs[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.allocs | List | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.warnings[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.warnings | List | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.staffSettlements[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.staffSettlements | List | 容器字段,结构不变,新增元素见上方 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 | — | — | 科目行全集(与 details 同事务对账保存,未提交的既有行软删) | | details | Body | List | — | — | 逐户用量全集(按 itemId + orderId 对账) | | expectedVersion | Body | Integer | — | — | 乐观锁版本,取自 GB-ADM-050 返回的 version | #### 出参 | 字段 | 类型 | 说明 | |------|------|------| | data.warnings[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | orderId | Long | 关联子订单 ID(同层级对照) | | data.warnings | List | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | — | — | 要出具的子订单 ID 列表;为空表示本期全部尚未出具的户。 | | target | Body | String | — | — | 出具目标:CONTRACT 只开合同 / INSURANCE 只开保险 / BOTH 两者都开。 | | reason | Body | String | — | — | 作废重开时的作废原因(仅 reissue 端点使用,可空) | #### 出参 | 字段 | 类型 | 说明 | |------|------|------| | data.results[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | orderId | Long | 子订单 ID(同层级对照) | | data.results | List | 容器字段,结构不变,新增元素见上方 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 | — | — | 要出具的子订单 ID 列表;为空表示本期全部尚未出具的户。 | | target | Body | String | — | — | 出具目标:CONTRACT 只开合同 / INSURANCE 只开保险 / BOTH 两者都开。 | | reason | Body | String | — | — | 作废重开时的作废原因(仅 reissue 端点使用,可空) | #### 出参 | 字段 | 类型 | 说明 | |------|------|------| | data.results[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | orderId | Long | 子订单 ID(同层级对照) | | data.results | List | 容器字段,结构不变,新增元素见上方 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 | — | — | 要催签的子订单 ID 列表;为空表示本期全部「合同已出但未签」的户。 | #### 出参 | 字段 | 类型 | 说明 | |------|------|------| | data.results[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | orderId | Long | 子订单 ID(同层级对照) | | data.results | List | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.roster[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.roster | List | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.vehicleMissing[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.vehicleMissing | List | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.vehicleExemptHouseholds[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.vehicleExemptHouseholds | List | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.transferDeclaredWithoutRequirement[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.transferDeclaredWithoutRequirement | List | 容器字段,结构不变,新增元素见上方 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 | — | — | 被打回的子订单 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 | 容器字段,结构不变,新增元素见上方 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 | — | — | 待确认的子订单 ID 列表(必填,1~200 户,服务端去重) | | dispatchRemark | Body | String | — | — | 确认备注(选填,≤500 字;整批共用,提供给车队) | #### 出参 | 字段 | 类型 | 说明 | |------|------|------| | data.failed[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | orderId | Long | 子订单 ID(同层级对照) | | data.failed | List | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | — | — | 行程节点 ID 列表,原样取自团期行程汇总 `days[].nodes[].nodeIds`(雪花,传 String); | #### 出参 | 字段 | 类型 | 说明 | |------|------|------| | data.rows[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | orderId | Long | 子订单 ID(同层级对照) | | data.rows | List | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | — | — | 全部乘车分组(全量替换,未出现在本次提交里的分组会被移出当前版本) | #### 出参 | 字段 | 类型 | 说明 | |------|------|------| | data.exemptHouseholds[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | orderId | Long | 子订单ID(同层级对照) | | data.exemptHouseholds | List | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.staleHeadcountOrders[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.staleHeadcountOrders | List | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.paddedOrderDays[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.paddedOrderDays | List | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.seatOptionAdjusted[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.seatOptionAdjusted | List | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.violations[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.violations | List | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.exemptHouseholds[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.exemptHouseholds | List | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | — | — | 关联出行人 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 | — | — | 交通批次列表(全量覆盖订单已有批次) | #### 出参 | 字段 | 类型 | 说明 | |------|------|------| | data.plans[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | orderId | Long | 订单 ID(同层级对照) | | data.plans | List | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 teamNo 行 | | data.departures[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | data.departures | List | 容器字段,结构不变,新增元素见上方 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 | — | — | 关联出行人 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 | — | — | 凭证图片 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 | — | — | 全量明细 | #### 出参 | 字段 | 类型 | 说明 | |------|------|------| | 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 | 容器字段,结构不变,新增元素见上方 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 | — | — | 媒体 traceIds(wx 内容安全机审用) | #### 出参 | 字段 | 类型 | 说明 | |------|------|------| | data.records[].teamNo | String | **新增**:团号(为 `null` 见「降级响应」) | | refundId | Long | 退款记录ID(同层级对照) | | data.records | List | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | 容器字段,结构不变,新增元素见上方 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 | — | — | 导游列表 | | busInfo | Body | List | — | — | 车队列表 | | itineraryList | Body | List | — | — | 行程列表(按天按站点) | | touristList | Body | List | — | — | 游客列表 | | agencyOptions | Body | List | — | — | agencyOptions | | businessTypeOptions | Body | List | — | — | 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 | — | — | 导游列表 | | busInfo | Body | List | — | — | 车队列表 | | itineraryList | Body | List | — | — | 行程列表(按天按站点) | | touristList | Body | List | — | — | 游客列表 | | agencyOptions | Body | List | — | — | agencyOptions | | businessTypeOptions | Body | List | — | — | 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\ | 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\ | 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