# 订单列表 + 订单详情 + 懒加载 Tab 接口契约清单(管理后台) > 端类型:**管理后台**(v3)|变更类型:**修改接口**(多 PR 累积契约整理 + 1 个新增 Tab) > 服务:hl-order-service-v3 | Controller 前缀:`/v3/admin/order` | 基线 commit:`f95757df7`|日期:2026-06-05 ## 通用约定 - 响应包装 `Result`(`code=200` 成功);列表为 `PageResult`;HTTP 状态恒 200,前端判 `code`/`success`。 - 所有 Long 主键序列化为**字符串**(防 JS 精度丢失),前端按 string 接收。 - 鉴权:`Authorization: Bearer `。时间 `yyyy-MM-dd HH:mm:ss`,日期 `yyyy-MM-dd`。 - 错误码:`581007 订单不存在`(接口 2~10 传入不存在订单 ID 时返回)。 - 枚举字段统一见文末 **附录 A 枚举字典**;3 处枚举口径差异见 **附录 B**(务必按字符串容错)。 ## 接口总览 | # | 接口 | 地址 | 本次 | |---|---|---|---| | 1 | 订单列表 | `GET /v3/admin/order` | 无字段变更 | | 2 | 订单详情(主) | `GET /v3/admin/order/{id}` | overview 重构 + 出行人明文 + 主接口瘦身 | | 3 | 财务 Tab | `GET /v3/admin/order/{id}/finance` | 删 surchargeType | | 4 | 合同保险 Tab | `GET /v3/admin/order/{id}/contract-insurance` | events 真实化 | | 5 | 发票 Tab | `GET /v3/admin/order/{id}/invoices` | **新增接口** | | 6 | 行程 Tab | `GET /v3/admin/order/{id}/itinerary` | 删 days + requirement 真实化 | | 7 | 大交通 Tab | `GET /v3/admin/order/{id}/transport-plans` | 主接口移出转懒加载 | | 8 | 状态时间线 Tab | `GET /v3/admin/order/{id}/status-log` | 无字段变更 | | 9 | 退款 Tab | `GET /v3/admin/order/{id}/refund` | 无字段变更 | | 10 | 服务标准 Tab | `GET /v3/admin/order/{id}/service-standard` | 重构一站式聚合 | > 懒加载 Tab = #3~#10 共 8 个:进入详情页先调 #2 拿头部 + 状态徽标,各 Tab 点开时再各自拉取。 --- ## 1. 订单列表 **接口地址**:`GET /v3/admin/order` **接口介绍**:管理后台订单列表,支持状态/标签/关键字/出发日期/来源/定制师等多条件过滤,分页返回。 **本次修改点**:无字段变更(沿用现状,列表项含 6 步 flowStep 步骤条字段)。 **入参**(query 参数) | 字段 | 类型 | 必填 | 含义 | 示例 | |---|---|---|---|---| | page | Integer | 否 | 页码(默认 1) | 1 | | pageSize | Integer | 否 | 每页条数(默认 10) | 10 | | orderStatus | String | 否 | 粗状态过滤(多值逗号分隔) | CUSTOMIZING | | flowStatus | String | 否 | 细状态过滤 | RESOURCE_PREPARING | | tagNames | List\ | 否 | 标签过滤(多标签 AND) | ["二次复购"] | | keyword | String | 否 | 团号/客户名/产品名/订单号 LIKE | 张三 | | departureDateFrom | LocalDate | 否 | 出发日期范围起始 | 2026-06-01 | | departureDateTo | LocalDate | 否 | 出发日期范围结束 | 2026-06-30 | | createSource | String | 否 | 来源过滤 | CONSULTANT | | cancelled | Boolean | 否 | 是否含已取消(默认 false) | false | | consultantName | String | 否 | 定制师姓名 LIKE | 李定制 | **入参示例** ``` GET /v3/admin/order?page=1&pageSize=10&orderStatus=CUSTOMIZING&keyword=张三 ``` **出参**:`PageResult`,外层 `records`(数组)+ `total`/`current`/`size` 分页字段。 单条 `OrderListItemRespVO`(35 字段): | 字段 | 类型 | 含义 | |---|---|---| | id | String | 订单 ID | | orderNo | String | 订单号(永不变) | | teamNo | String | 团号(订金支付成功生成,创单 null) | | displayOrderNo | String | 展示订单号 | | productName | String | 产品名(快照) | | productCoverImg | String | 产品封面 | | tierName | String | 档位名 | | customerName | String | 客户姓名 | | customerPhoneMasked | String | 客户手机(脱敏) | | peopleSummary | String | 人数摘要 | | departureDate | LocalDate | 出发日(未定 null) | | tripDays | Integer | 行程天数 | | orderStatus | String | 粗状态值(附录 A) | | orderStatusName | String | 粗状态中文 | | flowStatus | String | 细状态值(附录 A) | | flowStatusName | String | 细状态中文 | | flowStep | Integer | 6 步当前步序号(0=待支付,1-6,null=已取消) | | flowStepTotal | Integer | 总步数(6) | | flowStepCode | String | 当前步英文码(附录 A) | | currentSubFlows | List\ | 当前步子流程(仅 RESOURCE 步非 null) | | totalAmount | BigDecimal | 订单金额 | | paidAmount | BigDecimal | 实付金额 | | balanceAmount | BigDecimal | 待付金额 | | consultantName | String | 定制师姓名 | | createSource | String | 来源值(附录 A) | | createSourceLabel | String | 来源中文 | | tags | List\ | 标签列表 | | createdAt | LocalDateTime | 创单时间 | | depositAmount | BigDecimal | 订金额(FULL 为 null) | | depositRatio | Integer | 订金比例%(FULL 为 null) | | paymentMode | String | DEPOSIT/FULL | | singleRoomSurcharge | BigDecimal | 单房差(未触发 null) | | agencyId | String | 旅行社主体 ID | | refundPolicyId | String | 退款政策 ID | | productSubtitle | String | 产品副标题 | `SubFlowVO`(子流程) | 字段 | 类型 | 含义 | |---|---|---| | code | String | 子流程英文码 HOTEL/VEHICLE/GUIDE/PHOTOGRAPHER | | name | String | 子流程名称 | | status | String | DONE/PROCESSING/WAITING | | label | String | 显示标签(如"待配") | `TagVO`(标签) | 字段 | 类型 | 含义 | |---|---|---| | name | String | 标签名 | | type | String | SYSTEM/MANUAL | | color | String | 十六进制色 #RRGGBB | | creator | String | 标签创建人姓名 | **出参示例** ```jsonc { "code": 200, "message": "成功", "success": true, "data": { "total": 1, "current": 1, "size": 10, "records": [{ "id": "1900000000000903", "orderNo": "TEST-RESOURCE-903", "teamNo": null, "displayOrderNo": "TEST-RESOURCE-903", "productName": "长白山3日私家定制游", "tierName": "标准档", "customerName": "测试客户", "customerPhoneMasked": "138****8001", "peopleSummary": "2 大", "departureDate": "2026-07-01", "tripDays": 5, "orderStatus": "CUSTOMIZING", "orderStatusName": "定制中", "flowStatus": "RESOURCE_PREPARING", "flowStatusName": "资源准备", "flowStep": 2, "flowStepTotal": 6, "flowStepCode": "RESOURCE", "currentSubFlows": [ {"code": "HOTEL", "name": "配房", "status": "PROCESSING", "label": "待配"}, {"code": "VEHICLE", "name": "配车", "status": "PROCESSING", "label": "处理中"} ], "totalAmount": 9800.00, "paidAmount": 0.00, "balanceAmount": 9800.00, "consultantName": "李定制", "createSource": "CONSULTANT", "createSourceLabel": "定制师创建", "tags": [], "createdAt": "2026-06-04 18:49:39", "depositAmount": null, "depositRatio": null, "paymentMode": "FULL", "singleRoomSurcharge": null, "agencyId": "8000000000000001", "refundPolicyId": "7000000000000001", "productSubtitle": "私家小团·专车专导" }] } } ``` --- ## 2. 订单详情(主接口) **接口地址**:`GET /v3/admin/order/{id}` **接口介绍**:订单详情页头部聚合接口,返回主单信息(main) + 标签(tags) + 概览(overview,含客户信息与备注)。其余明细已拆为懒加载 Tab。 **本次修改点**: - 主接口**瘦身**:原 `transportPlans` / `itinerary` 全量字段已移出,改为独立懒加载接口(#3385)。 - `overview` **重构**为 `customerInfo` + `remarkInfo` 两分类(原扁平字段,#3488)。 - overview 出行人/联系电话/证件号改**明文**返回(idCard/phone/emergencyPhone 不脱敏,#3509)。 **入参** | 字段 | 位置 | 类型 | 必填 | 含义 | |---|---|---|---|---| | id | path | Long | 是 | 订单 ID | **入参示例** ``` GET /v3/admin/order/1900000000000903 ``` **出参**:`OrderDetailRespVO` | 字段 | 类型 | 含义 | |---|---|---| | main | OrderMainVO | 主单 + Tab 状态徽标 + 进度管道 | | tags | List\ | 标签区(结构同 §1 TagVO) | | overview | OverviewVO | 概览(客户信息 + 备注) | `main`(OrderMainVO,47 字段) | 字段 | 类型 | 含义 | |---|---|---| | id | String | 订单 ID | | orderNo | String | 订单号(永不变) | | teamNo | String | 团号(未成团 null) | | displayOrderNo | String | 展示订单号 | | productName | String | 产品名 | | tierName | String | 档位名 | | productSubtitle | String | 产品副标题 | | orderStatus | String | 粗状态值(附录 A) | | orderStatusName | String | 粗状态中文 | | flowStatus | String | 细状态值(附录 A) | | flowStatusName | String | 细状态中文 | | flowStep | Integer | 6 步当前步序号(0/1-6/null) | | flowStepTotal | Integer | 总步数(6) | | flowDisplayText | String | 步骤展示文案(纯中文,不带 "X/6 ·") | | flowStepCode | String | 当前步英文码(CANCELLED/待支付为 null) | | flowStepStatus | String | 当前步状态(PROCESSING=进行中) | | totalAmount | BigDecimal | 订单金额 | | paidAmount | BigDecimal | 实付金额 | | balanceAmount | BigDecimal | 待付金额 | | departureDate | LocalDate | 出发日期 | | returnDate | LocalDate | 返回日期 | | tripDays | Integer | 行程天数 | | tripNights | Integer | 行程夜数 | | createSource | String | 来源值(附录 A) | | createSourceLabel | String | 来源中文 | | confirmedAt | LocalDateTime | 确认订单时间 | | progressStepper | List\ | 6 主节点进度管道(已取消返空数组) | | contractStatus | String | [Tab 徽标]合同状态(按字符串容错,附录 B) | | insuranceStatus | String | [Tab 徽标]保险状态(附录 B) | | refundStatus | String | [Tab 徽标]退款状态 NONE/PROCESSING/COMPLETED | | hasRefund | Boolean | 是否有退款记录 | | hasServiceStandard | Boolean | 是否有服务标准快照 | | hasFinanceDetail | Boolean | 是否有财务明细(discount/surcharge>0) | | depositAmount | BigDecimal | 订金额(FULL 为 null) | | depositRatio | Integer | 订金比例%(FULL 为 null) | | paymentMode | String | DEPOSIT/FULL | | payStatus | String | 支付状态 UNPAID/DEPOSIT_PAID/FULLY_PAID | | singleRoomSurcharge | BigDecimal | 单房差(未触发 null) | | agencyId | String | 旅行社主体 ID | | refundPolicyId | String | 退款政策 ID | `PipelineNodeVO`(进度节点) | 字段 | 类型 | 含义 | |---|---|---| | step | Integer | 步序号 1-6 | | code | String | 节点码 PROFILE/RESOURCE/CONFIRM/DEPART/REVIEW/SETTLE | | name | String | 节点名称 | | status | String | DONE/PROCESSING/WAITING | | label | String | 显示标签 | | isCurrent | Boolean | 是否当前步 | | subFlows | List\ | 子流程(仅 RESOURCE 节点非 null,结构同 §1) | `overview`(OverviewVO) | 字段 | 类型 | 含义 | |---|---|---| | customerInfo | CustomerInfoVO | 客户信息分类 | | remarkInfo | RemarkInfoVO | 备注分类 | `CustomerInfoVO`(客户信息) | 字段 | 类型 | 含义 | |---|---|---| | contactName | String | 联系人姓名 | | contactPhone | String | 联系电话(**admin 明文**) | | agencyName | String | 商户名(不存在为 null) | | consultantName | String | 定制师姓名 | | peopleSummary | String | 人数摘要 | | adultCount | Integer | 成人数 | | childCount | Integer | 儿童数 | | youngChildCount | Integer | 小童数 | | babyCount | Integer | 婴儿数 | | createTime | LocalDateTime | 创建时间 | | emergencyContactName | String | 紧急联系人姓名 | | emergencyContactPhone | String | 紧急联系人手机(**明文**) | | travelers | List\ | 出行人集合(明文) | `TravelerPlainVO`(出行人,明文 #3509) | 字段 | 类型 | 含义 | |---|---|---| | id | String | 出行人 ID | | orderId | String | 订单 ID | | travelerType | String | ADULT/CHILD/YOUNG_CHILD/BABY | | name | String | 姓名(占位行为 null) | | gender | String | 1=男 / 2=女 / 0=未知 | | birthday | LocalDate | 出生日期 | | idType | String | ID_CARD/PASSPORT/BIRTH_CERT | | idCard | String | 证件号(**明文**) | | nationality | String | 国籍(默认中国) | | race | String | 民族(默认汉族) | | phone | String | 出行人手机(**明文**) | | emergencyContact | String | 紧急联系人姓名 | | emergencyPhone | String | 紧急联系人电话(**明文**) | | roomGroupNo | Integer | 同住分组号 | | profileStatus | String | 资料完善 PENDING/COMPLETED | | transportPlanIds | List\ | 关联大交通批次 ID 列表 | `RemarkInfoVO`(备注) | 字段 | 类型 | 含义 | |---|---|---| | customerRemark | String | 用户备注(只读) | | consultantRemark | String | 定制师备注 | | hotelRemark | String | 用房备注(无需求 null) | | vehicleRemark | String | 用车备注(无需求 null) | **出参示例** ```jsonc { "code": 200, "message": "成功", "success": true, "data": { "main": { "id": "1900000000000903", "orderNo": "TEST-RESOURCE-903", "teamNo": null, "displayOrderNo": "TEST-RESOURCE-903", "productName": "长白山3日私家定制游", "tierName": "标准档", "productSubtitle": "私家小团·专车专导", "orderStatus": "CUSTOMIZING", "orderStatusName": "定制中", "flowStatus": "RESOURCE_PREPARING", "flowStatusName": "资源准备", "flowStep": 2, "flowStepTotal": 6, "flowDisplayText": "资源准备", "flowStepCode": "RESOURCE", "flowStepStatus": "PROCESSING", "totalAmount": 9800.00, "paidAmount": 0.00, "balanceAmount": 9800.00, "departureDate": "2026-07-01", "returnDate": "2026-07-05", "tripDays": 5, "tripNights": 4, "createSource": "CONSULTANT", "createSourceLabel": "定制师创建", "confirmedAt": null, "progressStepper": [ {"step": 1, "code": "PROFILE", "name": "补全信息", "status": "DONE", "label": null, "isCurrent": false, "subFlows": null}, {"step": 2, "code": "RESOURCE", "name": "资源准备", "status": "PROCESSING", "label": null, "isCurrent": true, "subFlows": [{"code": "HOTEL", "name": "配房", "status": "PROCESSING", "label": "待配"}]} ], "contractStatus": "NONE", "insuranceStatus": "NONE", "refundStatus": "NONE", "hasRefund": false, "hasServiceStandard": true, "hasFinanceDetail": false, "depositAmount": null, "depositRatio": null, "paymentMode": "FULL", "payStatus": "UNPAID", "singleRoomSurcharge": null, "agencyId": "8000000000000001", "refundPolicyId": "7000000000000001" }, "tags": [], "overview": { "customerInfo": { "contactName": "测试客户", "contactPhone": "13800138001", "agencyName": "呼籁旅行", "consultantName": "李定制", "peopleSummary": "2 大", "adultCount": 2, "childCount": 0, "youngChildCount": 0, "babyCount": 0, "createTime": "2026-06-04 18:49:39", "emergencyContactName": "王五", "emergencyContactPhone": "13900139000", "travelers": [{ "id": "1910000000000001", "orderId": "1900000000000903", "travelerType": "ADULT", "name": "张三", "gender": "1", "birthday": "1990-01-01", "idType": "ID_CARD", "idCard": "220101199001010011", "nationality": "中国", "race": "汉族", "phone": "13800138001", "emergencyContact": "王五", "emergencyPhone": "13900139000", "roomGroupNo": 1, "profileStatus": "COMPLETED", "transportPlanIds": [] }] }, "remarkInfo": { "customerRemark": "希望安排靠窗座位", "consultantRemark": "VIP 客户,重点跟进", "hotelRemark": null, "vehicleRemark": null } } } } ``` --- ## 3. 财务 Tab **接口地址**:`GET /v3/admin/order/{id}/finance` **接口介绍**:订单财务明细,含金额汇总、支付/优惠/附加费三类明细列表。 **本次修改点**:`SurchargeVO` **删除 `surchargeType` 字段**(恒 null 无数据源,#3523)——破坏性,前端引用处需移除。 **入参** | 字段 | 位置 | 类型 | 必填 | 含义 | |---|---|---|---|---| | id | path | Long | 是 | 订单 ID | **入参示例** ``` GET /v3/admin/order/1900000000000903/finance ``` **出参**:`FinanceVO` | 字段 | 类型 | 含义 | |---|---|---| | totalAmount | BigDecimal | 订单总额 | | paidAmount | BigDecimal | 实付金额 | | balanceAmount | BigDecimal | 待付金额 | | discountAmount | BigDecimal | 优惠金额汇总 | | surchargeAmount | BigDecimal | 附加费汇总 | | refundAmount | BigDecimal | 退款金额汇总 | | payments | List\ | 支付明细 | | discounts | List\ | 优惠明细 | | surcharges | List\ | 附加费用 | `PaymentVO` | 字段 | 类型 | 含义 | |---|---|---| | id | String | 支付记录 ID | | payType | String | DEPOSIT/BALANCE | | amount | BigDecimal | 支付金额 | | paidAt | LocalDateTime | 支付时间 | | status | String | SUCCESS/PENDING/FAIL | `DiscountVO` | 字段 | 类型 | 含义 | |---|---|---| | id | String | 优惠 ID | | name | String | 优惠名称 | | amount | BigDecimal | 优惠金额 | | type | String | EARLY_BIRD/VIP/… | | source | String | MANUAL/AUTO | | createdAt | LocalDateTime | 创建时间 | `SurchargeVO`(已删 `surchargeType`) | 字段 | 类型 | 含义 | |---|---|---| | id | String | 附加费 ID | | name | String | 附加费名称 | | amount | BigDecimal | 金额 | | source | String | HOTEL_ASSIGN/VEHICLE_ASSIGN/… | | createdAt | LocalDateTime | 创建时间 | **出参示例** ```jsonc { "code": 200, "message": "成功", "success": true, "data": { "totalAmount": 9800.00, "paidAmount": 5000.00, "balanceAmount": 4800.00, "discountAmount": 200.00, "surchargeAmount": 300.00, "refundAmount": 0.00, "payments": [ {"id": "2001", "payType": "DEPOSIT", "amount": 5000.00, "paidAt": "2026-06-04 19:00:00", "status": "SUCCESS"} ], "discounts": [ {"id": "3001", "name": "早鸟优惠", "amount": 200.00, "type": "EARLY_BIRD", "source": "AUTO", "createdAt": "2026-06-04 18:50:00"} ], "surcharges": [ {"id": "4001", "name": "单房差", "amount": 300.00, "source": "HOTEL_ASSIGN", "createdAt": "2026-06-04 18:55:00"} ] } } ``` > 无数据时各 list 返回 `[]`(非 null)。 --- ## 4. 合同保险 Tab **接口地址**:`GET /v3/admin/order/{id}/contract-insurance` **接口介绍**:订单合同与保险状态 + 事件时间线。 **本次修改点**:`events` **真实化**——来自 status_log / insurance_status_log,不再恒空(#3514)。 **入参** | 字段 | 位置 | 类型 | 必填 | 含义 | |---|---|---|---|---| | id | path | Long | 是 | 订单 ID | **入参示例** ``` GET /v3/admin/order/1900000000000903/contract-insurance ``` **出参**:`ContractInsuranceVO` | 字段 | 类型 | 含义 | |---|---|---| | contract | ContractVO | 合同子对象 | | insurance | InsuranceVO | 保险子对象 | `ContractVO` | 字段 | 类型 | 含义 | |---|---|---| | contractStatus | String | 合同状态(附录 B) | | contractSignedAt | LocalDateTime | 签约时间 | | contractFileUrl | String | 合同文件 URL | | events | List\ | 合同事件时间线 | `InsuranceVO` | 字段 | 类型 | 含义 | |---|---|---| | insuranceStatus | String | 保险状态(附录 B) | | insurancePolicyNo | String | 保单号 | | insurancePremium | BigDecimal | 保费 | | events | List\ | 保险事件时间线 | `EventVO` | 字段 | 类型 | 含义 | |---|---|---| | eventType | String | 事件类型 GENERATE/SIGN/ISSUE/… | | occurredAt | LocalDateTime | 发生时间 | **出参示例** ```jsonc { "code": 200, "message": "成功", "success": true, "data": { "contract": { "contractStatus": "SIGNED", "contractSignedAt": "2026-06-05 10:00:00", "contractFileUrl": "https://oss.example.com/contracts/903.pdf", "events": [ {"eventType": "GENERATE", "occurredAt": "2026-06-05 09:30:00"}, {"eventType": "SIGN", "occurredAt": "2026-06-05 10:00:00"} ] }, "insurance": { "insuranceStatus": "INSURED", "insurancePolicyNo": "PICC2026070100123", "insurancePremium": 60.00, "events": [{"eventType": "ISSUE", "occurredAt": "2026-06-05 10:05:00"}] } } } ``` --- ## 5. 发票 Tab 〔新增接口〕 **接口地址**:`GET /v3/admin/order/{id}/invoices` **接口介绍**:返回该订单**全部**发票(含已作废 VOIDED),按 applyAt 倒序。 **本次修改点**:**新增接口**(#3517 / #3521)。无发票返回 `data:[]`。 **入参** | 字段 | 位置 | 类型 | 必填 | 含义 | |---|---|---|---|---| | id | path | Long | 是 | 订单 ID | **入参示例** ``` GET /v3/admin/order/1900000000000903/invoices ``` **出参**:`List`(每条 23 字段) | 字段 | 类型 | 含义 | |---|---|---| | id | String | 发票 ID | | orderId | String | 订单 ID | | invoiceType | String | 类型值(附录 A) | | invoiceTypeText | String | 类型文案 | | titleType | String | 抬头类型 COMPANY/PERSONAL | | titleName | String | 抬头名称 | | taxNo | String | 税号(公司抬头/专票必填) | | amount | BigDecimal | 开票金额(元) | | status | String | 状态值(附录 A) | | statusText | String | 状态文案 | | auditStatus | String | 机审 PENDING/APPROVED/MANUAL_REVIEW/REJECTED | | applyReason | String | 申请说明 | | applyAt | LocalDateTime | 申请时间 | | fileUrl | String | 发票文件 OSS 链接(UPLOADED 后有值) | | uploader | String | 上传人 | | uploadedAt | LocalDateTime | 上传时间 | | deliveredAt | LocalDateTime | 送达时间(DELIVERED 时有值) | | voidReason | String | 作废原因(VOIDED 时有值) | | email | String | 邮箱(电子发票) | | mailAddress | String | 邮寄地址(纸质发票) | | bankName | String | 开户行(专票) | | bankAccount | String | 开户账号(专票) | | registAddress | String | 注册地址(专票) | | registPhone | String | 注册电话(专票) | **出参示例** ```jsonc { "code": 200, "message": "成功", "success": true, "data": [{ "id": "5001", "orderId": "1900000000000903", "invoiceType": "ELECTRONIC", "invoiceTypeText": "电子普通发票", "titleType": "PERSONAL", "titleName": "张三", "taxNo": null, "amount": 9800.00, "status": "ISSUED", "statusText": "已开票", "auditStatus": "APPROVED", "applyReason": "报销", "applyAt": "2026-06-05 11:00:00", "fileUrl": null, "uploader": null, "uploadedAt": null, "deliveredAt": null, "voidReason": null, "email": "zhangsan@example.com", "mailAddress": null, "bankName": null, "bankAccount": null, "registAddress": null, "registPhone": null }] } ``` --- ## 6. 行程 Tab **接口地址**:`GET /v3/admin/order/{id}/itinerary` **接口介绍**:订单配房/配车的需求(requirement) + 实配(assignments)。 **本次修改点**: - 删顶层 MOCK `days`(逐天行程改走 `/itinerary/full`,#3502)——破坏性。 - `hotelGroup`/`vehicleGroup`.requirement **真实化**(#3385/#3493);assignment 增 `requirementId`。 - `HotelAssignmentVO`(实配酒店)当前**恒返空**,待 house 域接通,前端按空处理勿报错。 **入参** | 字段 | 位置 | 类型 | 必填 | 含义 | |---|---|---|---|---| | id | path | Long | 是 | 订单 ID | **入参示例** ``` GET /v3/admin/order/1900000000000903/itinerary ``` **出参**:`ItineraryVO` | 字段 | 类型 | 含义 | |---|---|---| | hotelGroup | HotelGroupVO | 配房需求 + 实配 | | vehicleGroup | VehicleGroupVO | 配车需求 + 实配 | `HotelGroupVO`(配房组) | 字段 | 类型 | 含义 | |---|---|---| | requirement | HotelRequirementBriefVO | 配房需求(客户/定制师提交的用房要求) | | assignments | List\ | 实配酒店列表(当前恒空,待 house 域接通) | `VehicleGroupVO`(配车组) | 字段 | 类型 | 含义 | |---|---|---| | requirement | VehicleRequirementBriefVO | 配车需求(客户/定制师提交的用车要求) | | assignments | List\ | 实配车辆列表(实际派车 + 司机) | `HotelRequirementBriefVO`(配房需求) | 字段 | 类型 | 含义 | |---|---|---| | requirementId | String | 需求 ID | | version | Integer | 版本号 | | status | String | PENDING/PROCESSING/DONE | | submittedAt | LocalDateTime | 提交时间 | | totalRoomCount | Integer | 合计间数 | | roomTypeSummary | String | 房型摘要(双床房×4 / 大床房×2) | | specialTags | List\ | 特殊诉求标签 | | remark | String | 备注 | | claimerName | String | 房控接单人姓名 | | days | List\ | 按天结构化需求 | `RequirementDayVO`(按天需求) | 字段 | 类型 | 含义 | |---|---|---| | dayNumber | Integer | 第几天 | | stayDate | LocalDate | 入住日(派生) | | remark | String | 当天备注 | | hotels | List\ | 当天房型明细 | `RequirementHotelVO`(房型明细) | 字段 | 类型 | 含义 | |---|---|---| | hotelId | String | 目标酒店 ID(可 null) | | roomCategory | String | 房型字典 code TWIN/DOUBLE_BED | | roomCategoryLabel | String | 房型中文标签 | | roomCount | Integer | 间数 | | budget | BigDecimal | 预算/间(可 null) | `HotelAssignmentVO`(实配酒店,**当前恒返空**) | 字段 | 类型 | 含义 | |---|---|---| | assignmentId | String | 实配 ID | | requirementId | String | 关联配房需求 ID | | familyIndex | Integer | 家庭序号 | | dayNumber | Integer | 第几天 | | stayDate | LocalDate | 入住日 | | hotelName | String | 酒店名 | | roomType | String | 房型中文名 | | plannedCost | BigDecimal | 单价(元/间·晚) | | remark | String | 备注 | `VehicleRequirementBriefVO`(配车需求) | 字段 | 类型 | 含义 | |---|---|---| | requirementId | String | 需求 ID | | version | Integer | 版本号 | | status | String | PENDING/PROCESSING/DONE | | submittedAt | LocalDateTime | 提交时间 | | vehicleTypeSummary | String | 车型摘要 | | specialTags | List\ | 特殊诉求标签 | | remark | String | 备注 | `VehicleAssignmentVO`(实配车辆) | 字段 | 类型 | 含义 | |---|---|---| | assignmentId | String | 实配 ID | | vehicleType | String | 车型 | | vehicleCount | Integer | 车辆数 | | licensePlate | String | 车牌 | | brand | String | 品牌 | | seats | Integer | 座位数 | | plannedDailyFee | BigDecimal | 计划日单价 | | driverName | String | 司机姓名 | | driverPhoneMasked | String | 司机手机(脱敏) | | remark | String | 备注 | **出参示例** ```jsonc { "code": 200, "message": "成功", "success": true, "data": { "hotelGroup": { "requirement": { "requirementId": "6001", "version": 1, "status": "PROCESSING", "submittedAt": "2026-06-04 20:00:00", "totalRoomCount": 2, "roomTypeSummary": "双床房×1 / 大床房×1", "specialTags": ["无烟房", "高楼层"], "remark": "尽量安排连号房", "claimerName": "房控小赵", "days": [{ "dayNumber": 1, "stayDate": "2026-07-01", "remark": null, "hotels": [{"hotelId": null, "roomCategory": "TWIN", "roomCategoryLabel": "双床房", "roomCount": 1, "budget": 400.00}] }] }, "assignments": [] }, "vehicleGroup": { "requirement": { "requirementId": "6101", "version": 1, "status": "PROCESSING", "submittedAt": "2026-06-04 20:05:00", "vehicleTypeSummary": "7 座商务车×1", "specialTags": ["儿童座椅"], "remark": "全程同一司机" }, "assignments": [{ "assignmentId": "6201", "vehicleType": "7座商务车", "vehicleCount": 1, "licensePlate": "吉A·12345", "brand": "别克GL8", "seats": 7, "plannedDailyFee": 800.00, "driverName": "李师傅", "driverPhoneMasked": "138****0000", "remark": null }] } } } ``` --- ## 7. 大交通批次 Tab **接口地址**:`GET /v3/admin/order/{id}/transport-plans` **接口介绍**:订单大交通(抵达/返程)批次安排,含航班/车次/自驾、接送、关联出行人。 **本次修改点**:原在详情主接口内,#3385 起拆为独立懒加载接口(字段不变)。无批次返回 `data:[]`。 **入参** | 字段 | 位置 | 类型 | 必填 | 含义 | |---|---|---|---|---| | id | path | Long | 是 | 订单 ID | **入参示例** ``` GET /v3/admin/order/1900000000000903/transport-plans ``` **出参**:`List`(每条 17 字段) | 字段 | 类型 | 含义 | |---|---|---| | id | String | 批次 ID | | orderId | String | 订单 ID | | direction | String | 方向 ARRIVAL/DEPARTURE | | mode | String | TOGETHER(一起)/SEPARATE(分批) | | transportType | String | FLIGHT/TRAIN/SELF_DRIVE | | transportNo | String | 航班号/车次号 | | carrier | String | 航司/铁路公司 | | departStation | String | 出发站 | | arriveStation | String | 到达站 | | departTime | LocalDateTime | 出发时间 | | arriveTime | LocalDateTime | 到达时间 | | selfDrivePeriod | String | 自驾时段 MORNING/AFTERNOON/EVENING | | selfDriveEta | LocalDateTime | 自驾预计到达时间 | | pickupRequired | Boolean | 是否需要接送 | | pickupRemark | String | 接送备注 | | travelers | List\ | 关联出行人 | | remark | String | 备注 | `TravelerRef`(关联出行人) | 字段 | 类型 | 含义 | |---|---|---| | id | String | 出行人 ID | | name | String | 出行人姓名 | **出参示例** ```jsonc { "code": 200, "message": "成功", "success": true, "data": [{ "id": "7001", "orderId": "1900000000000903", "direction": "ARRIVAL", "mode": "TOGETHER", "transportType": "FLIGHT", "transportNo": "CA1234", "carrier": "中国国航", "departStation": "北京首都T3", "arriveStation": "长春龙嘉", "departTime": "2026-07-01 08:00:00", "arriveTime": "2026-07-01 10:00:00", "selfDrivePeriod": null, "selfDriveEta": null, "pickupRequired": true, "pickupRemark": "出站口接机举牌", "travelers": [{"id": "1910000000000001", "name": "张三"}], "remark": null }] } ``` --- ## 8. 状态记录时间线 Tab **接口地址**:`GET /v3/admin/order/{id}/status-log` **接口介绍**:订单全生命周期状态/操作流水时间线。 **本次修改点**:无字段变更。无记录返回 `data:[]`。 **入参** | 字段 | 位置 | 类型 | 必填 | 含义 | |---|---|---|---|---| | id | path | Long | 是 | 订单 ID | **入参示例** ``` GET /v3/admin/order/1900000000000903/status-log ``` **出参**:`List` | 字段 | 类型 | 含义 | |---|---|---| | occurredAt | LocalDateTime | 发生时间 | | operator | String | 操作人 | | action | String | 操作描述 | | fromStatus | String | 变更前状态(有状态变更时有值) | | toStatus | String | 变更后状态(有状态变更时有值) | | amount | BigDecimal | 涉及金额(支付/退款时有值) | **出参示例** ```jsonc { "code": 200, "message": "成功", "success": true, "data": [ {"occurredAt": "2026-06-04 18:49:39", "operator": "李定制", "action": "创建订单", "fromStatus": null, "toStatus": "CUSTOMIZING", "amount": null}, {"occurredAt": "2026-06-04 19:00:00", "operator": "测试客户", "action": "支付订金", "fromStatus": null, "toStatus": null, "amount": 5000.00} ] } ``` --- ## 9. 退款明细 Tab **接口地址**:`GET /v3/admin/order/{id}/refund` **接口介绍**:订单退款申请明细(可多笔),含审批/到账进度时间线。 **本次修改点**:无字段变更。**无退款申请时整节返回 `data:null`**(前端需与"订单不存在 581007"区分)。 **入参** | 字段 | 位置 | 类型 | 必填 | 含义 | |---|---|---|---|---| | id | path | Long | 是 | 订单 ID | **入参示例** ``` GET /v3/admin/order/1900000000000903/refund ``` **出参**:`RefundDetailVO` | 字段 | 类型 | 含义 | |---|---|---| | totalRefundAmount | BigDecimal | 合计退款金额 | | applications | List\ | 多笔退款申请 | `RefundApplicationVO` | 字段 | 类型 | 含义 | |---|---|---| | applicationId | String | 申请 ID | | status | String | 状态(附录 B) | | statusText | String | 状态描述文案 | | refundAmount | BigDecimal | 退款金额 | | refundChannel | String | 退款渠道 | | approverName | String | 审批人 | | approvedAt | LocalDateTime | 审批时间 | | estimatedArriveDate | LocalDate | 预计到账日期 | | actualArriveDate | LocalDate | 实际到账日期(未到账 null) | | progress | List\ | 4 步进度时间线 | | items | List\ | 退款明细行 | `ProgressStepVO` | 字段 | 类型 | 含义 | |---|---|---| | step | String | APPLY/APPROVE/PAYOUT/ARRIVED | | label | String | 展示标签 | | status | String | DONE/ACTIVE/PENDING | | occurredAt | LocalDateTime | 发生时间(PENDING 时 null) | `RefundItemVO` | 字段 | 类型 | 含义 | |---|---|---| | itemName | String | 项目名称 | | reason | String | 退款原因 | | appliedAt | LocalDateTime | 申请时间 | | amount | BigDecimal | 退款金额(负数) | **出参示例** ```jsonc // 空态(无退款) {"code": 200, "message": "成功", "success": true, "data": null} // 有退款 { "code": 200, "message": "成功", "success": true, "data": { "totalRefundAmount": 1000.00, "applications": [{ "applicationId": "8001", "status": "PENDING_PAYOUT", "statusText": "待打款", "refundAmount": 1000.00, "refundChannel": "原路退回", "approverName": "财务老王", "approvedAt": "2026-06-05 14:00:00", "estimatedArriveDate": "2026-06-08", "actualArriveDate": null, "progress": [ {"step": "APPLY", "label": "提交申请", "status": "DONE", "occurredAt": "2026-06-05 13:00:00"}, {"step": "APPROVE", "label": "审批通过", "status": "DONE", "occurredAt": "2026-06-05 14:00:00"}, {"step": "PAYOUT", "label": "打款", "status": "ACTIVE", "occurredAt": null}, {"step": "ARRIVED", "label": "到账", "status": "PENDING", "occurredAt": null} ], "items": [{"itemName": "酒店退订", "reason": "行程缩短", "appliedAt": "2026-06-05 13:00:00", "amount": -1000.00}] }] } } ``` --- ## 10. 服务标准 Tab **接口地址**:`GET /v3/admin/order/{id}/service-standard` **接口介绍**:订单服务标准(出团承诺 + 逐天行程 + 退费说明),数据源为产品侧预置并冻入订单快照的成品。 **本次修改点**:**重构为一站式聚合**(#3340/#3351)——原 itinerary/notice/refundPolicy/serviceStandard/dayTips 五字段全部替换为本套 ServiceStandardVO 结构;读快照预置成品。**产品快照缺失时返回 `data:null`**。 **入参** | 字段 | 位置 | 类型 | 必填 | 含义 | |---|---|---|---|---| | id | path | Long | 是 | 订单 ID | **入参示例** ``` GET /v3/admin/order/1900000000000903/service-standard ``` **出参**:`ServiceStandardVO` | 字段 | 类型 | 含义 | |---|---|---| | title | String | 标题("出团服务标准·"+产品名;name 空时退化为"出团服务标准") | | subtitle | String | 副标题(固定常量) | | intro | String | 服务标准简介(无结构 null) | | notices | List\ | 服务承诺条目扁平列表(无结构空列表) | | itinerary | List\ | 行程逐天列表 | | refundNotes | List\ | 退费说明聚合列表(无退费说明空列表) | `NoticeItem`(服务承诺条目) | 字段 | 类型 | 含义 | |---|---|---| | title | String | 主文案标题 | | content | String | 正文 | | remark | String | 灰色二级说明(可选) | | color | String | 文案颜色 #RRGGBB(可选) | | contactName | String | 联系人(可选) | | phone | String | 手机号(可选) | `DayVO`(行程天) | 字段 | 类型 | 含义 | |---|---|---| | dayNumber | Integer | 天序号 | | dayTitle | String | 天标题 | | remark | String | 当天备注(恒 null) | | itineraryNode | List\ | 当天点位列表 | `ItineraryNode`(行程点位) | 字段 | 类型 | 含义 | |---|---|---| | nodeName | String | 点位名称 | | description | String | 点位描述 | | contactName | String | 联系人(占位,恒 null) | | phone | String | 手机号(占位,恒 null) | `RefundNoteGroup`(退费说明分组) | 字段 | 类型 | 含义 | |---|---|---| | sourceName | String | 来源点位名称 | | intro | String | 退费说明备注 | | items | List\ | 退费明细列表 | `RefundItem`(退费明细) | 字段 | 类型 | 含义 | |---|---|---| | title | String | 展示标题 | | amount | BigDecimal | 退费金额(赠送为 0) | | unitLabel | String | 展示文案 /人 /团 /辆 | | settleScope | String | 结算粒度 PER_PERSON/PER_TEAM/PER_VEHICLE | | settleScopeLabel | String | 结算粒度中文 | | remark | String | 备注 | | effectiveFrom | LocalDate | 生效起日(null=无限制) | | effectiveTo | LocalDate | 生效止日(null=无限制) | **出参示例**(取自测试服 903 真实返回) ```jsonc { "code": 200, "message": "成功", "success": true, "data": { "title": "出团服务标准·长白山3日私家定制游", "subtitle": "领队/师傅/运营 共同遵守·配合合同执行", "intro": "我们承诺全程提供贴心服务保障,专车专导,确保旅途安心舒适。", "notices": [ {"title": "接送站服务", "content": "司机持有 A1 驾照,8 年以上驾龄,提供机场/高铁站免费接送", "remark": "仅限指定时段(08:00-20:00)", "color": "#FF6600", "contactName": "李师傅", "phone": "13800000000"}, {"title": "用餐标准", "content": "每日含早餐,正餐按行程安排当地特色餐", "remark": "忌口请提前告知", "color": null, "contactName": null, "phone": null} ], "itinerary": [{ "dayNumber": 1, "dayTitle": "抵达长春-接机入住", "remark": null, "itineraryNode": [ {"nodeName": "长春龙嘉国际机场", "description": "专车接机,送往酒店休息", "contactName": null, "phone": null}, {"nodeName": "入住酒店", "description": "长春市区四星酒店,自由活动", "contactName": null, "phone": null} ] }], "refundNotes": [{ "sourceName": "长白山天池", "intro": "景区门票及区间车费用,按下列规则退费", "items": [ {"title": "成人未参加", "amount": 125, "unitLabel": "/人", "settleScope": "PER_PERSON", "settleScopeLabel": "按人", "remark": "含门票105+环保车20", "effectiveFrom": null, "effectiveTo": null} ] }] } } ``` --- ## 附录 A 枚举字典 ### OrderStatus(订单粗状态) | 值 | 中文 | |---|---| | PENDING_PAY | 待支付 | | CUSTOMIZING | 定制中 | | PENDING_DEPARTURE | 待出行 | | TRAVELLING | 出行中 | | COMPLETED | 已完成 | | CANCELLED | 已取消 | ### OrderFlowStatus(订单细状态,12 态) | 值 | 中文 | |---|---| | AWAITING_PAY | 待支付 | | AWAITING_PROFILE | 待补全信息 | | RESOURCE_PREPARING | 资源准备 | | PENDING_CONFIRM | 待确认 | | PENDING_DEPARTURE | 待出行 | | TRAVELLING | 出行中 | | PENDING_REVIEW | 待核单 | | REVIEWING | 核单中 | | PENDING_SETTLE | 待结算 | | SETTLED | 已结算 | | COMPLETED | 已完成 | | CANCELLED | 已取消 | ### OrderFlowMainStep(6 主步,flowStepCode / progressStepper) | code | step | 中文 | |---|---|---| | PROFILE | 1 | 补全信息 | | RESOURCE | 2 | 资源准备 | | CONFIRM | 3 | 确认 | | DEPART | 4 | 出行 | | REVIEW | 5 | 核单 | | SETTLE | 6 | 结算 | > flowStep=0 表示"待支付"(步骤条未开始);CANCELLED 终态 flowStep=null、flowStepCode=null。 ### 其他枚举 | 枚举字段 | 值 | 中文 | |---|---|---| | createSource | CONSULTANT / CUSTOMER | 定制师创建(默认/兜底) / C端客户自下单 | | payStatus | UNPAID / DEPOSIT_PAID / FULLY_PAID | 未支付 / 订金已付 / 全款已付 | | paymentMode | DEPOSIT / FULL | 订金模式 / 全款模式 | | refundStatus(main 徽标) | NONE / PROCESSING / COMPLETED | 无退款 / 退款中 / 已完成 | | invoiceType | VAT_NORMAL / VAT_SPECIAL / ELECTRONIC | 增值税普票 / 增值税专票 / 电子普票 | | invoice status | APPLIED / ISSUED / UPLOADED / DELIVERED / VOIDED | 已申请 / 已开票 / 已上传 / 已送达 / 已作废 | | invoice auditStatus | PENDING / APPROVED / MANUAL_REVIEW / REJECTED | 待审 / 通过 / 转人工 / 拒绝 | | titleType | COMPANY / PERSONAL | 公司 / 个人 | | transportType | FLIGHT / TRAIN / SELF_DRIVE | 飞机 / 火车 / 自驾 | | direction | ARRIVAL / DEPARTURE | 抵达 / 返程 | | settleScope | PER_PERSON / PER_TEAM / PER_VEHICLE | 按人 / 按团 / 按辆 | | travelerType | ADULT / CHILD / YOUNG_CHILD / BABY | 成人 / 儿童 / 小童 / 婴儿 | | idType | ID_CARD / PASSPORT / BIRTH_CERT | 身份证 / 护照 / 出生证 | | 通用 status | DONE / PROCESSING / WAITING | 完成 / 处理中 / 等待 | ## 附录 B 枚举口径差异(⚠️ 按字符串容错,配合 statusText) | 字段 | 底层枚举类取值 | VO 文案口径 | |---|---|---| | contractStatus | PENDING/GENERATED/REPORTED/UPLOADED/SIGNING/SIGNED/VOIDING/VOIDED | NONE/GENERATING/GENERATED/SIGNED/VOIDED/RESIGNING | | insuranceStatus | PENDING/INSURING/INSURED/CANCELLED/FAILED | NONE/INSURED/CANCELLED/FAILED | | refund status | PENDING/APPROVED/REJECTED/REFUNDING/REFUNDED/CANCELLED/ABNORMAL | PENDING_APPROVE/PENDING_PAYOUT/PENDING_ARRIVAL/COMPLETED/REJECTED | > 上述由 Converter 映射,前端**勿硬编码全集**,按接口实际返回字符串渲染 + 用 `statusText` 展示文案。 --- ## 关联 / 联系人 - Issue:[#3517](https://git.1814.love:8443/wx/HL/issues/3517) [#3514](https://git.1814.love:8443/wx/HL/issues/3514) [#3509](https://git.1814.love:8443/wx/HL/issues/3509) [#3502](https://git.1814.love:8443/wx/HL/issues/3502) [#3500](https://git.1814.love:8443/wx/HL/issues/3500) [#3493](https://git.1814.love:8443/wx/HL/issues/3493) [#3488](https://git.1814.love:8443/wx/HL/issues/3488) [#3385](https://git.1814.love:8443/wx/HL/issues/3385) [#3340](https://git.1814.love:8443/wx/HL/issues/3340) [#3523](https://git.1814.love:8443/wx/HL/issues/3523) - PR:[#3521](https://git.1814.love:8443/wx/HL/pulls/3521) [#3524](https://git.1814.love:8443/wx/HL/pulls/3524) [#3510](https://git.1814.love:8443/wx/HL/pulls/3510) [#3388](https://git.1814.love:8443/wx/HL/pulls/3388) - 基线 commit:`f95757df7` | 后端负责人:腰苏图(订单 v3) ```