# 接口变更记录 — 2026-03-18 20:48

> **提交** `a6d360a` · **作者** wx · **时间** 2026-03-18 20:48:58 +0800
>
> feat: 订单交通信息管理 + 合同平台选择 + 超时通知 + transport-service

## 变更总览

- **hl-transport-service**
  - 🆕 AdminTransport (+7 接口)
- **合同服务**
  - AdminContract (+1)
- **订单服务**
  - AdminOrder (+2)
  - MpOrder (+2)

---

## hl-transport-service

### 🆕 新增: AdminTransport

### 📌 `GET` /admin/transport/flight/by-flight-no — 按航班号查询航班动态

**参数**

  - `flightNo` (`String`) — 查询参数
  - `date` (`String`) — 查询参数

**响应** `Result<List<FlightVO>>`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `flightNo` | `String` | 航班号 |
| `airline` | `String` | 航空公司名称 |
| `category` | `String` | 航班属性：国内/国际/地区 |
| `departAirportCode` | `String` | 出发机场三字码 |
| `arriveAirportCode` | `String` | 到达机场三字码 |
| `departAirport` | `String` | 出发机场名称 |
| `arriveAirport` | `String` | 到达机场名称 |
| `departCity` | `String` | 出发城市 |
| `arriveCity` | `String` | 到达城市 |
| `planDepartTime` | `String` | 计划起飞时间（yyyy-MM-dd HH:mm:ss） |
| `planArriveTime` | `String` | 计划到达时间（yyyy-MM-dd HH:mm:ss） |
| `actualDepartTime` | `String` | 实际起飞时间（yyyy-MM-dd HH:mm:ss） |
| `actualArriveTime` | `String` | 实际到达时间（yyyy-MM-dd HH:mm:ss） |
| `status` | `String` | 航班状态：计划/起飞/到达/延误/取消/返航/备降等 |
| `stopFlag` | `String` | 是否经停：0不经停，1经停1次，n经停n次 |
| `shareFlag` | `String` | 是否共享航班：0否，1是 |
| `shareFlightNo` | `String` | 共享航班号（实际承运航班号） |
| `departTerminal` | `String` | 出发航站楼 |
| `arriveTerminal` | `String` | 到达航站楼 |
| `boardGate` | `String` | 登机口 |
| `arriveExit` | `String` | 到达出口 |
| `departTimezone` | `String` | 出发时区偏移（秒） |
| `arriveTimezone` | `String` | 到达时区偏移（秒） |

### 📌 `GET` /admin/transport/flight/by-airport — 按机场三字码查询航班动态

**参数**

  - `dep` (`String`) — 查询参数
  - `arr` (`String`) — 查询参数
  - `date` (`String`) — 查询参数

**响应** `Result<List<FlightVO>>`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `flightNo` | `String` | 航班号 |
| `airline` | `String` | 航空公司名称 |
| `category` | `String` | 航班属性：国内/国际/地区 |
| `departAirportCode` | `String` | 出发机场三字码 |
| `arriveAirportCode` | `String` | 到达机场三字码 |
| `departAirport` | `String` | 出发机场名称 |
| `arriveAirport` | `String` | 到达机场名称 |
| `departCity` | `String` | 出发城市 |
| `arriveCity` | `String` | 到达城市 |
| `planDepartTime` | `String` | 计划起飞时间（yyyy-MM-dd HH:mm:ss） |
| `planArriveTime` | `String` | 计划到达时间（yyyy-MM-dd HH:mm:ss） |
| `actualDepartTime` | `String` | 实际起飞时间（yyyy-MM-dd HH:mm:ss） |
| `actualArriveTime` | `String` | 实际到达时间（yyyy-MM-dd HH:mm:ss） |
| `status` | `String` | 航班状态：计划/起飞/到达/延误/取消/返航/备降等 |
| `stopFlag` | `String` | 是否经停：0不经停，1经停1次，n经停n次 |
| `shareFlag` | `String` | 是否共享航班：0否，1是 |
| `shareFlightNo` | `String` | 共享航班号（实际承运航班号） |
| `departTerminal` | `String` | 出发航站楼 |
| `arriveTerminal` | `String` | 到达航站楼 |
| `boardGate` | `String` | 登机口 |
| `arriveExit` | `String` | 到达出口 |
| `departTimezone` | `String` | 出发时区偏移（秒） |
| `arriveTimezone` | `String` | 到达时区偏移（秒） |

### 📌 `GET` /admin/transport/flight/by-city — 按城市三字码查询航班动态

**参数**

  - `depCity` (`String`) — 查询参数
  - `arrCity` (`String`) — 查询参数
  - `date` (`String`) — 查询参数

**响应** `Result<List<FlightVO>>`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `flightNo` | `String` | 航班号 |
| `airline` | `String` | 航空公司名称 |
| `category` | `String` | 航班属性：国内/国际/地区 |
| `departAirportCode` | `String` | 出发机场三字码 |
| `arriveAirportCode` | `String` | 到达机场三字码 |
| `departAirport` | `String` | 出发机场名称 |
| `arriveAirport` | `String` | 到达机场名称 |
| `departCity` | `String` | 出发城市 |
| `arriveCity` | `String` | 到达城市 |
| `planDepartTime` | `String` | 计划起飞时间（yyyy-MM-dd HH:mm:ss） |
| `planArriveTime` | `String` | 计划到达时间（yyyy-MM-dd HH:mm:ss） |
| `actualDepartTime` | `String` | 实际起飞时间（yyyy-MM-dd HH:mm:ss） |
| `actualArriveTime` | `String` | 实际到达时间（yyyy-MM-dd HH:mm:ss） |
| `status` | `String` | 航班状态：计划/起飞/到达/延误/取消/返航/备降等 |
| `stopFlag` | `String` | 是否经停：0不经停，1经停1次，n经停n次 |
| `shareFlag` | `String` | 是否共享航班：0否，1是 |
| `shareFlightNo` | `String` | 共享航班号（实际承运航班号） |
| `departTerminal` | `String` | 出发航站楼 |
| `arriveTerminal` | `String` | 到达航站楼 |
| `boardGate` | `String` | 登机口 |
| `arriveExit` | `String` | 到达出口 |
| `departTimezone` | `String` | 出发时区偏移（秒） |
| `arriveTimezone` | `String` | 到达时区偏移（秒） |

### 📌 `GET` /admin/transport/train/by-train-no-stations — 按车次+出发站+到达站查询火车动态

**参数**

  - `trainNo` (`String`) — 查询参数
  - `dep` (`String`) — 查询参数
  - `arr` (`String`) — 查询参数
  - `date` (`String`) — 查询参数

**响应** `Result<List<TrainVO>>`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `trainNo` | `String` | 车次 |
| `departStation` | `String` | 出发车站 |
| `arriveStation` | `String` | 到达车站 |
| `shutdown` | `String` | 是否停运：0否，1是 |
| `planDepartTime` | `String` | 计划出发时间 |
| `planArriveTime` | `String` | 计划到达时间 |
| `estimatedDepartTime` | `String` | 预计出发时间 |
| `estimatedArriveTime` | `String` | 预计到达时间 |
| `actualDepartTime` | `String` | 实际出发时间 |
| `actualArriveTime` | `String` | 实际到达时间 |
| `departStatus` | `String` | 出发状态：计划/正点/晚点/出发 |
| `arriveStatus` | `String` | 到达状态：计划/正点/晚点/到达 |
| `duration` | `Integer` | 运行时长（分钟） |
| `stops` | `List<TrainStopVO>` | 经停站列表 |

### 📌 `GET` /admin/transport/train/by-train-no — 按车次查询火车动态（含全部经停站）

**参数**

  - `trainNo` (`String`) — 查询参数
  - `date` (`String`) — 查询参数

**响应** `Result<List<TrainVO>>`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `trainNo` | `String` | 车次 |
| `departStation` | `String` | 出发车站 |
| `arriveStation` | `String` | 到达车站 |
| `shutdown` | `String` | 是否停运：0否，1是 |
| `planDepartTime` | `String` | 计划出发时间 |
| `planArriveTime` | `String` | 计划到达时间 |
| `estimatedDepartTime` | `String` | 预计出发时间 |
| `estimatedArriveTime` | `String` | 预计到达时间 |
| `actualDepartTime` | `String` | 实际出发时间 |
| `actualArriveTime` | `String` | 实际到达时间 |
| `departStatus` | `String` | 出发状态：计划/正点/晚点/出发 |
| `arriveStatus` | `String` | 到达状态：计划/正点/晚点/到达 |
| `duration` | `Integer` | 运行时长（分钟） |
| `stops` | `List<TrainStopVO>` | 经停站列表 |

### 📌 `GET` /admin/transport/train/by-station — 按出发站+到达站查询火车车次

**参数**

  - `dep` (`String`) — 查询参数
  - `arr` (`String`) — 查询参数
  - `date` (`String`) — 查询参数

**响应** `Result<List<TrainVO>>`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `trainNo` | `String` | 车次 |
| `departStation` | `String` | 出发车站 |
| `arriveStation` | `String` | 到达车站 |
| `shutdown` | `String` | 是否停运：0否，1是 |
| `planDepartTime` | `String` | 计划出发时间 |
| `planArriveTime` | `String` | 计划到达时间 |
| `estimatedDepartTime` | `String` | 预计出发时间 |
| `estimatedArriveTime` | `String` | 预计到达时间 |
| `actualDepartTime` | `String` | 实际出发时间 |
| `actualArriveTime` | `String` | 实际到达时间 |
| `departStatus` | `String` | 出发状态：计划/正点/晚点/出发 |
| `arriveStatus` | `String` | 到达状态：计划/正点/晚点/到达 |
| `duration` | `Integer` | 运行时长（分钟） |
| `stops` | `List<TrainStopVO>` | 经停站列表 |

### 📌 `GET` /admin/transport/train/by-city — 按出发城市+到达城市查询火车车次

**参数**

  - `depCity` (`String`) — 查询参数
  - `arrCity` (`String`) — 查询参数
  - `date` (`String`) — 查询参数

**响应** `Result<List<TrainVO>>`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `trainNo` | `String` | 车次 |
| `departStation` | `String` | 出发车站 |
| `arriveStation` | `String` | 到达车站 |
| `shutdown` | `String` | 是否停运：0否，1是 |
| `planDepartTime` | `String` | 计划出发时间 |
| `planArriveTime` | `String` | 计划到达时间 |
| `estimatedDepartTime` | `String` | 预计出发时间 |
| `estimatedArriveTime` | `String` | 预计到达时间 |
| `actualDepartTime` | `String` | 实际出发时间 |
| `actualArriveTime` | `String` | 实际到达时间 |
| `departStatus` | `String` | 出发状态：计划/正点/晚点/出发 |
| `arriveStatus` | `String` | 到达状态：计划/正点/晚点/到达 |
| `duration` | `Integer` | 运行时长（分钟） |
| `stops` | `List<TrainStopVO>` | 经停站列表 |

---

## 合同服务

### AdminContract

> 📖 **接口文档**: [http://192.168.100.236:8095/doc.html](http://192.168.100.236:8095/doc.html) → 标签 **「合同管理」**

### 🆕 `GET` /admin/contract/platforms — 可用合同平台列表

> 返回系统已对接的合同平台列表及可用状态。

**响应** `Result<List<ContractPlatformInfo>>`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `platformName` | `String` |  |
| `displayName` | `String` |  |
| `available` | `boolean` |  |

---

## 订单服务

### AdminOrder

> 📖 **接口文档**: [http://192.168.100.236:8084/doc.html](http://192.168.100.236:8084/doc.html) → 分组 **「3.1 订单管理」** → 标签 **「管理端订单接口」**

### 🆕 `PUT` /admin/order/{orderId}/transport — 保存交通信息（航班/车次）

> 为订单保存交通信息，支持多条航班和车次。每次提交为全量替换（先删后增）。

**参数**

  - `{orderId}` (`Long`) — 路径参数：订单ID

**请求体** `TransportSegmentRequest`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `segments` | `List<SegmentItem>` | 交通分段列表 |
| `transportType` | `String` | 交通类型（字典：transport_type）: FLIGHT-航班, TRAIN-火车 |
| `transportNo` | `String` | 航班号/车次号 |
| `departStation` | `String` | 出发站/出发机场 |
| `arriveStation` | `String` | 到达站/到达机场 |
| `departTime` | `LocalDateTime` | 出发时间 |
| `arriveTime` | `LocalDateTime` | 到达时间 |
| `remark` | `String` | 备注 |

**响应** `Result<List<OrderTransportSegment>>`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `segmentId` | `Long` | 分段ID |
| `orderId` | `Long` | 订单ID |
| `transportType` | `String` | 交通类型（字典：transport_type）: FLIGHT-航班, TRAIN-火车 |
| `transportNo` | `String` | 航班号/车次号 |
| `departStation` | `String` | 出发站/出发机场 |
| `arriveStation` | `String` | 到达站/到达机场 |
| `departTime` | `LocalDateTime` | 出发时间 |
| `arriveTime` | `LocalDateTime` | 到达时间 |
| `remark` | `String` | 备注 |
| `sortOrder` | `Integer` | 排序序号 |
| `deletedAt` | `LocalDateTime` | 删除时间（软删除） |
| `createTime` | `LocalDateTime` | 创建时间 |
| `updateTime` | `LocalDateTime` | 更新时间 |

### 🆕 `GET` /admin/order/{orderId}/transport — 查询交通信息

> 查询订单的所有交通信息（航班/车次），按排序序号和出发时间升序排列

**参数**

  - `{orderId}` (`Long`) — 路径参数：订单ID

**响应** `Result<List<OrderTransportSegment>>`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `segmentId` | `Long` | 分段ID |
| `orderId` | `Long` | 订单ID |
| `transportType` | `String` | 交通类型（字典：transport_type）: FLIGHT-航班, TRAIN-火车 |
| `transportNo` | `String` | 航班号/车次号 |
| `departStation` | `String` | 出发站/出发机场 |
| `arriveStation` | `String` | 到达站/到达机场 |
| `departTime` | `LocalDateTime` | 出发时间 |
| `arriveTime` | `LocalDateTime` | 到达时间 |
| `remark` | `String` | 备注 |
| `sortOrder` | `Integer` | 排序序号 |
| `deletedAt` | `LocalDateTime` | 删除时间（软删除） |
| `createTime` | `LocalDateTime` | 创建时间 |
| `updateTime` | `LocalDateTime` | 更新时间 |

### MpOrder

> 📖 **接口文档**: [http://192.168.100.236:8084/doc.html](http://192.168.100.236:8084/doc.html) → 标签 **「C端订单接口」**

### 🆕 `PUT` /mp/order/{orderId}/transport — 保存交通信息（航班/车次）

> 用户为自己的订单录入交通信息，支持多条航班和车次。每次提交为全量替换。

**参数**

  - `{orderId}` (`Long`) — 路径参数：订单ID

**请求体** `TransportSegmentRequest`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `segments` | `List<SegmentItem>` | 交通分段列表 |
| `transportType` | `String` | 交通类型（字典：transport_type）: FLIGHT-航班, TRAIN-火车 |
| `transportNo` | `String` | 航班号/车次号 |
| `departStation` | `String` | 出发站/出发机场 |
| `arriveStation` | `String` | 到达站/到达机场 |
| `departTime` | `LocalDateTime` | 出发时间 |
| `arriveTime` | `LocalDateTime` | 到达时间 |
| `remark` | `String` | 备注 |

**响应** `Result<List<OrderTransportSegment>>`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `segmentId` | `Long` | 分段ID |
| `orderId` | `Long` | 订单ID |
| `transportType` | `String` | 交通类型（字典：transport_type）: FLIGHT-航班, TRAIN-火车 |
| `transportNo` | `String` | 航班号/车次号 |
| `departStation` | `String` | 出发站/出发机场 |
| `arriveStation` | `String` | 到达站/到达机场 |
| `departTime` | `LocalDateTime` | 出发时间 |
| `arriveTime` | `LocalDateTime` | 到达时间 |
| `remark` | `String` | 备注 |
| `sortOrder` | `Integer` | 排序序号 |
| `deletedAt` | `LocalDateTime` | 删除时间（软删除） |
| `createTime` | `LocalDateTime` | 创建时间 |
| `updateTime` | `LocalDateTime` | 更新时间 |

### 🆕 `GET` /mp/order/{orderId}/transport — 查询交通信息

> 查询自己订单的所有交通信息（航班/车次）

**参数**

  - `{orderId}` (`Long`) — 路径参数：订单ID

**响应** `Result<List<OrderTransportSegment>>`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `segmentId` | `Long` | 分段ID |
| `orderId` | `Long` | 订单ID |
| `transportType` | `String` | 交通类型（字典：transport_type）: FLIGHT-航班, TRAIN-火车 |
| `transportNo` | `String` | 航班号/车次号 |
| `departStation` | `String` | 出发站/出发机场 |
| `arriveStation` | `String` | 到达站/到达机场 |
| `departTime` | `LocalDateTime` | 出发时间 |
| `arriveTime` | `LocalDateTime` | 到达时间 |
| `remark` | `String` | 备注 |
| `sortOrder` | `Integer` | 排序序号 |
| `deletedAt` | `LocalDateTime` | 删除时间（软删除） |
| `createTime` | `LocalDateTime` | 创建时间 |
| `updateTime` | `LocalDateTime` | 更新时间 |

---

## 📦 其他数据对象变更

> 以下变更未直接关联到本次接口变更，但可能影响现有接口的请求/响应

### hl-transport-service

#### 🆕 TrainStopVO

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `stationName` | `String` | 车站名称 |
| `arriveTime` | `String` | 到站时间 |
| `departTime` | `String` | 发车时间 |

### 合同服务

#### ✏️ CreateContractRequest

  - 🆕 `platform` (`String`) — 合同平台（字典：contract_platform）: 12301-全国旅游监管平台, FADADA-法大大, ESIGN-e签宝, TENCENT_ESS-腾讯电子签。不传则根据模板自动确定

#### ✏️ ReportContractRequest

  - 🆕 `platform` (`String`) — 合同平台（字典：contract_platform）: 12301-全国旅游监管平台, FADADA-法大大, ESIGN-e签宝, TENCENT_ESS-腾讯电子签

### 订单服务

#### ✏️ OrderDetailVO

  - 🆕 `transportSegments` (`List<OrderTransportSegment>`) — 交通信息列表（航班/车次，含transportType/transportNo/departStation/arriveStation/departTime/arriveTime等）

<details>
<summary>📁 全部变更文件 (点击展开)</summary>

```
M	hl-contract-service/src/main/java/com/hulalv/contract/controller/AdminContractController.java
M	hl-contract-service/src/main/java/com/hulalv/contract/dto/CreateContractRequest.java
M	hl-contract-service/src/main/java/com/hulalv/contract/dto/ReportContractRequest.java
M	hl-contract-service/src/main/java/com/hulalv/contract/service/ContractService.java
M	hl-gateway/src/main/resources/application.yml
M	hl-order-service/src/main/java/com/hulalv/order/controller/AdminOrderController.java
M	hl-order-service/src/main/java/com/hulalv/order/controller/MpOrderController.java
A	hl-order-service/src/main/java/com/hulalv/order/dto/TransportSegmentRequest.java
A	hl-order-service/src/main/java/com/hulalv/order/entity/OrderTransportSegment.java
A	hl-order-service/src/main/java/com/hulalv/order/mapper/OrderTransportSegmentMapper.java
M	hl-order-service/src/main/java/com/hulalv/order/service/OrderService.java
A	hl-order-service/src/main/java/com/hulalv/order/service/OrderTransportSegmentService.java
M	hl-order-service/src/main/java/com/hulalv/order/vo/OrderDetailVO.java
M	hl-order-service/src/test/java/com/hulalv/order/service/OrderServiceTest.java
A	hl-transport-service/pom.xml
A	hl-transport-service/src/main/java/com/hulalv/transport/TransportServiceApplication.java
A	hl-transport-service/src/main/java/com/hulalv/transport/config/Knife4jConfig.java
A	hl-transport-service/src/main/java/com/hulalv/transport/config/RestTemplateConfig.java
A	hl-transport-service/src/main/java/com/hulalv/transport/config/VariFlightProperties.java
A	hl-transport-service/src/main/java/com/hulalv/transport/config/WebMvcConfig.java
A	hl-transport-service/src/main/java/com/hulalv/transport/constant/TransportConstants.java
A	hl-transport-service/src/main/java/com/hulalv/transport/controller/AdminTransportController.java
A	hl-transport-service/src/main/java/com/hulalv/transport/interceptor/AdminAuthInterceptor.java
A	hl-transport-service/src/main/java/com/hulalv/transport/service/FlightService.java
A	hl-transport-service/src/main/java/com/hulalv/transport/service/TrainService.java
A	hl-transport-service/src/main/java/com/hulalv/transport/service/VariFlightApiClient.java
A	hl-transport-service/src/main/java/com/hulalv/transport/vo/FlightVO.java
A	hl-transport-service/src/main/java/com/hulalv/transport/vo/TrainStopVO.java
A	hl-transport-service/src/main/java/com/hulalv/transport/vo/TrainVO.java
A	hl-transport-service/src/main/resources/bootstrap.yml
A	nacos-config/hl-transport-service-dev.yml
M	pom.xml
A	sql/order_transport_segment.sql
```
</details>