You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

591 lines
23 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# PAD 接口文档
## 1. 基础信息
- 服务默认端口:`8845`
- 默认基础地址:`http://<host>:8845`
- 直连接口统一前缀:`/api/queue/**`
- 本文范围:
- `pad.*` 标签对应的直连接口
- 虽然路径不在 `/api/queue/pad/**` 下,但 Swagger 标签仍属于 `pad.*` 的配套接口
- `/public` 统一网关映射
## 2. 统一返回结构
### 2.1 直连接口返回结构
绝大多数直连接口返回统一结构 `R<T>`
```json
{
"code": 200,
"msg": "操作成功",
"data": {}
}
```
字段说明:
| 字段 | 类型 | 说明 |
|---|---|---|
| `code` | `int` | 状态码,成功通常为 `200` |
| `msg` | `string` | 返回消息 |
| `data` | `object/array/null` | 具体业务数据 |
### 2.2 `/public` 网关返回结构
`/public` 返回 `PublicGatewayResponseVo<T>`,比 `R<T>` 多一个 `traceId`
```json
{
"code": 200,
"msg": "OK",
"traceId": "202604210001",
"data": {}
}
```
## 3. 接口清单
> 说明:
> - `Header.Authorization` 表示请求头 `Authorization: Bearer <token>`
> - `path.xxx` 表示路径参数
> - `query.xxx` 表示查询参数
> - `body.xxx` 表示 JSON 请求体字段
> - `未接入` 表示当前不能通过 `/public` 的 `tag + map.path` 转发
### 3.1 `pad.auth`
| 方法 | 请求地址 | 网关调用(tag/path) | 请求参数 | 返回值 | 备注 |
|---|---|---|---|---|---|
| `POST` | `/api/queue/pad/auth/login` | `pad.auth` + `/login` | `body.username`、`body.password``body.tenantId` 可选 | `R<LoginResponse>` | 登录 |
| `POST` | `/api/queue/pad/auth/refresh` | 未接入 | `body.refreshToken` | `R<LoginResponse>` | 刷新令牌 |
| `POST` | `/api/queue/pad/auth/logout` | 未接入 | `Header.Authorization` | `R<AuthLogoutVo>` | 用户退出 |
| `GET` | `/api/queue/pad/auth/profile` | 未接入 | `Header.Authorization` | `R<AuthProfileVo>` | 当前用户信息 |
| `POST` | `/api/queue/pad/auth/sign` | `pad.auth` + `/sign` | `body.tag`、`body.path`、`body.timestamp`、`body.nonce``body.query`、`body.body` 可选 | `R<SignResponseVo>` | 生成签名 |
| `GET` | `/api/queue/pad/auth/validate` | 未接入 | `Header.Authorization` | `R<TokenValidationVo>` | 校验令牌 |
### 3.2 `pad.business`
| 方法 | 请求地址 | 网关调用(tag/path) | 请求参数 | 返回值 | 备注 |
|---|---|---|---|---|---|
| `GET` | `/api/queue/pad/business` | 未接入 | 无 | `R<List<Business>>` | 查询所有业务类型 |
| `POST` | `/api/queue/pad/business` | 未接入 | `body.name``body.prefix` 可选但必须唯一;`body.enabled`、`body.type`、`body.handleCount`、`body.isSpecial` 可选 | `R<Business>` | 创建业务类型 |
| `GET` | `/api/queue/pad/business/{uid}` | 未接入 | `path.uid` | `R<Business>` | 按 UID 查询 |
| `PUT` | `/api/queue/pad/business/{uid}` | 未接入 | `path.uid`、`body.name`;其他字段同创建 | `R<Business>` | 更新业务类型 |
| `DELETE` | `/api/queue/pad/business/{uid}` | 未接入 | `path.uid` | `R<BusinessOperationVo>` | 删除业务类型 |
| `PATCH` | `/api/queue/pad/business/{uid}/enabled` | 未接入 | `path.uid`、`query.enabled` | `R<BusinessOperationVo>` | 更新启用状态 |
| `GET` | `/api/queue/pad/business/enabled` | `pad.business` + `/enabled` | 无 | `R<List<Business>>` | 查询启用业务类型 |
| `POST` | `/api/queue/pad/business/health-reopt/url` | 未接入 | `body.id``body.swjgMc`、`body.swjgDm` 可选 | `R<HealthReportUrlVo>` | 生成健康报告查询 URL |
| `GET` | `/api/queue/pad/business/page` | 未接入 | `query.page` 默认 `1`、`query.size` 默认 `10` | `R<BusinessPageVo>` | 分页查询 |
| `GET` | `/api/queue/pad/business/search` | 未接入 | `query.name` | `R<List<Business>>` | 名称模糊查询 |
| `GET` | `/api/queue/pad/business/special` | 未接入 | 无 | `R<List<Business>>` | 查询特殊业务 |
| `GET` | `/api/queue/pad/business/statistics` | 未接入 | 无 | `R<BusinessStatisticsVo>` | 业务统计 |
| `GET` | `/api/queue/pad/business/type/{type}` | 未接入 | `path.type` | `R<List<Business>>` | 按类型查询 |
| `GET` | `/api/queue/pad/business/validate/name` | 未接入 | `query.name``query.excludeUid` 可选 | `R<BusinessValidationVo>` | 校验名称唯一性 |
| `GET` | `/api/queue/pad/business/validate/prefix` | 未接入 | `query.prefix``query.excludeUid` 可选 | `R<BusinessValidationVo>` | 校验前缀唯一性 |
### 3.3 `pad.menu`
| 方法 | 请求地址 | 网关调用(tag/path) | 请求参数 | 返回值 | 备注 |
|---|---|---|---|---|---|
| `GET` | `/api/queue/pad/menu/business-types` | 未接入 | 无 | `R<BusinessMenuVo>` | 获取业务类型菜单 |
| `GET` | `/api/queue/pad/menu/main` | `pad.menu` + `/main` | 无 | `R<MenuPageVo>` | 获取主菜单 |
### 3.4 `pad.print`
| 方法 | 请求地址 | 网关调用(tag/path) | 请求参数 | 返回值 | 备注 |
|---|---|---|---|---|---|
| `GET` | `/api/queue/pad/print/printers` | `pad.print` + `/printers` | 无 | `R<List<String>>` | 获取打印机列表 |
| `POST` | `/api/queue/pad/print/text` | `pad.print` + `/text` | `body.content``body.printerName` 可选 | `R<Boolean>` | 打印文本 |
### 3.5 `pad.test`
| 方法 | 请求地址 | 网关调用(tag/path) | 请求参数 | 返回值 | 备注 |
|---|---|---|---|---|---|
| `POST` | `/api/queue/pad/test/medical-report/url` | 未接入 | `body.id`、`body.swjgMc`、`body.swjgDm` | `R<MedicalReportUrlVo>` | 测试用医保报告 URL |
### 3.6 `pad.ticket`
| 方法 | 请求地址 | 网关调用(tag/path) | 请求参数 | 返回值 | 备注 |
|---|---|---|---|---|---|
| `GET` | `/api/queue/pad/business/list` | 未接入 | 无 | `R<List<Business>>` | 虽然路径不在 `/ticket` 下,但 Swagger Tag 属于 `pad.ticket` |
| `GET` | `/api/queue/pad/ticket/{uid}` | 未接入 | `path.uid` | `R<Ticket>` | 按 UID 查询票号 |
| `PATCH` | `/api/queue/pad/ticket/{uid}/assign-window` | 未接入 | `path.uid`、`query.winId` | `R<TicketAssignWindowVo>` | 指派窗口 |
| `GET` | `/api/queue/pad/ticket/{uid}/status` | 未接入 | `path.uid` | `R<TicketStatusVo>` | 按 UID 查询状态 |
| `PATCH` | `/api/queue/pad/ticket/{uid}/status` | 未接入 | `path.uid`、`query.status` | `R<TicketStatusUpdateVo>` | 更新票号状态 |
| `GET` | `/api/queue/pad/ticket/business/{bizUid}` | 未接入 | `path.bizUid` | `R<List<Ticket>>` | 按业务类型查询票号 |
| `POST` | `/api/queue/pad/ticket/call/{ticketNumber}` | 未接入 | `path.ticketNumber`、`query.windowNumber` | `R<TicketCallVo>` | 指定票号叫号 |
| `POST` | `/api/queue/pad/ticket/call/next` | 未接入 | `body.windowUid``body.empUid` 可选 | `R<TicketCallResultVo>` | 叫下一号 |
| `POST` | `/api/queue/pad/ticket/call/specific/{ticketUid}` | 未接入 | `path.ticketUid`、`query.windowUid``query.empUid` 可选 | `R<TicketCallResultVo>` | 叫指定票 |
| `POST` | `/api/queue/pad/ticket/create-jump` | 未接入 | `body.bizUid``body.rankUserName`、`body.rankUserPhone`、`body.idCard`、`body.tktId` 可选 | `R<TakeTicketResponse>` | 创建插队票 |
| `GET` | `/api/queue/pad/ticket/list` | `pad.ticket` + `/list` | `query.page` 默认 `1`、`query.size` 默认 `10``query.status`、`query.businessType`、`query.tabType` 可选 | `R<TicketPageVo>` | 票号列表 |
| `GET` | `/api/queue/pad/ticket/list-by-status/{status}` | 未接入 | `path.status` | `R<List<Ticket>>` | 按状态码查询 |
| `POST` | `/api/queue/pad/ticket/resume` | 未接入 | `body.resumeToken``body.targetPosition` 可选,默认 `3` | `R<TicketResumeResultVo>` | 复号 |
| `POST` | `/api/queue/pad/ticket/verify/search` | 未接入 | `body.name`、`body.idCard`、`body.phone` 至少传一个;三者均按包含匹配;`body.page` 默认 `1`、`body.size` 默认 `10` | `R<TicketVerifyQueryPageVo>` | 模糊查询 `ticket_verify` 并判断是否已完成实名/人脸比对 |
| `POST` | `/api/queue/pad/ticket/skip/{ticketNumber}` | 未接入 | `path.ticketNumber` | `R<TicketSkipVo>` | 跳过票号 |
| `GET` | `/api/queue/pad/ticket/status/{ticketNumber}` | 未接入 | `path.ticketNumber` | `R<TicketStatusDetailVo>` | 按票号字符串查询状态 |
| `POST` | `/api/queue/pad/ticket/suspend` | 未接入 | `body.ticketUid``body.windowUid`、`body.empUid`、`body.idCard`、`body.phone` 可选 | `R<TicketSuspendResultVo>` | 挂起票号 |
| `GET` | `/api/queue/pad/ticket/suspend/info/{token}` | 未接入 | `path.token` | `R<SuspendedTicketDetailVo>` | 查询挂起详情 |
| `POST` | `/api/queue/pad/ticket/take` | `pad.queue` + `/ticket/take` | `body.bizUid`,且 `body.idCard` / `body.rankUserPhone` 至少传一个;`body.rankUserName`、`body.enterpriseId`、`body.appointmentUid`、`body.tktId` 可选 | `R<TakeTicketVo>` | 取号 |
| `POST` | `/api/queue/pad/ticket/take-by-appointment` | 未接入 | `body.bizUid`、`body.appointmentUid` | `R<TakeTicketVo>` | 预约换号 |
| `GET` | `/api/queue/pad/ticket/today_unified_tickets` | 未接入 | `query.page` 默认 `1`、`query.size` 默认 `10` | `R<TicketPageVo>` | 今日统一票号列表 |
| `GET` | `/api/queue/pad/ticket/waiting-count` | 未接入 | `query.bizUid` 可选 | `R<WaitingCountVo>` | 查询等待人数 |
### 3.7 `pad.appointment`
| 方法 | 请求地址 | 网关调用(tag/path) | 请求参数 | 返回值 | 备注 |
|---|---|---|---|---|---|
| `GET` | `/api/queue/pad/appointment/time-slots` | `pad.appointment` + `/time-slots` | 无 | `R<List<AppointmentTimeSlotVo>>` | 可用时间段 |
| `GET` | `/api/queue/pad/appointment/today` | 未接入 | `query.page` 默认 `1`、`query.size` 默认 `10``query.status`、`query.businessType`、`query.keyword` 可选 | `R<AppointmentPageVo>` | 今日预约列表 |
| `DELETE` | `/api/queue/pad/appointment/{appointmentId}` | 未接入 | `path.appointmentId` | `R<AppointmentActionVo>` | 取消预约 |
| `PUT` | `/api/queue/pad/appointment/{appointmentId}/status` | 未接入 | `path.appointmentId`、`query.status` | `R<AppointmentActionVo>` | 更新预约状态 |
| `GET` | `/api/queue/pad/appointment/statistics` | 未接入 | `query.date` 可选 | `R<AppointmentStatisticsVo>` | 预约统计 |
### 3.8 `pad.window`
| 方法 | 请求地址 | 网关调用(tag/path) | 请求参数 | 返回值 | 备注 |
|---|---|---|---|---|---|
| `GET` | `/api/queue/pad/window/list` | `pad.window` + `/list` | `query.page` 默认 `1`、`query.size` 默认 `10``query.enabled`、`query.name` 可选 | `R<WindowPageVo>` | 窗口列表 |
| `GET` | `/api/queue/pad/window/monitor/list` | `pad.window` + `/monitor/list` | 无 | `R<WindowMonitorListVo>` | 窗口监控列表 |
| `POST` | `/api/queue/pad/window/create` | 未接入 | `body.name``body.sid` 可选但必须唯一;`body.enabled`、`body.ledAddress`、`body.ledText`、`body.rankMode`、`body.rankAddress` 可选 | `R<WindowActionVo>` | 创建窗口 |
| `PUT` | `/api/queue/pad/window/{windowId}` | 未接入 | `path.windowId`、`body.name`;其他字段同创建 | `R<WindowActionVo>` | 更新窗口 |
| `PUT` | `/api/queue/pad/window/{windowId}/status` | 未接入 | `path.windowId`、`query.enabled` | `R<WindowActionVo>` | 切换窗口状态 |
| `GET` | `/api/queue/pad/window/{windowId}` | 未接入 | `path.windowId` | `R<WindowDetailVo>` | 窗口详情 |
| `GET` | `/api/queue/pad/window/{windowId}/business` | 未接入 | `path.windowId` | `R<WindowBusinessListVo>` | 获取窗口业务关联 |
| `POST` | `/api/queue/pad/window/{windowId}/business` | 未接入 | `path.windowId``body` 为数组,元素至少要有 `businessId``priority`、`enabled` 可选 | `R<WindowActionVo>` | 设置窗口业务关联 |
| `POST` | `/api/queue/pad/window/{windowId}/led` | 未接入 | `path.windowId`、`query.text` | `R<WindowActionVo>` | LED 显示控制 |
| `DELETE` | `/api/queue/pad/window/{windowId}` | 未接入 | `path.windowId` | `R<WindowActionVo>` | 删除窗口 |
### 3.9 `tag.hallSystem`
> Swagger 中标签名是 `tag.hallSystem`,但 `/public` 网关调用时实际 tag 要传 `pad.hallSystem`。
| 方法 | 请求地址 | 网关调用(tag/path) | 请求参数 | 返回值 | 备注 |
|---|---|---|---|---|---|
| `GET` | `/api/queue/pad/hallSystem/list` | `pad.hallSystem` + `/list` | `query.prefix` 可选 | `R<HallSystemListVo>` | 获取大厅配置列表 |
| `POST` | `/api/queue/pad/hallSystem/value` | `pad.hallSystem` + `/value` | `body.key``body.value` 可选 | `R<Boolean>` | 更新大厅配置 |
| `GET` | `/api/queue/pad/hallSystem/overview/metrics` | `pad.hallSystem` + `/overview/metrics``pad.queue` + `/overview/metrics` | 无 | `R<PadOverviewMetricsVo>` | 实时概览指标 |
| `GET` | `/api/queue/pad/hallSystem/overview/metrics/trend` | `pad.hallSystem` + `/overview/metrics/trend``pad.queue` + `/overview/metrics/trend` | `query.startTime`、`query.endTime` 可选,格式 `yyyy-MM-dd HH:mm:ss` | `R<PadOverviewMetricsTrendVo>` | 概览趋势 |
### 3.10 `pad.window` 配套 caller 窗口接口
| 方法 | 请求地址 | 网关调用(tag/path) | 请求参数 | 返回值 | 备注 |
|---|---|---|---|---|---|
| `GET` | `/api/queue/caller/windows/list` | 未接入 | `Header.Authorization` | `R<CallerWindowBindingResponse>` | 当前账号可绑定窗口列表 |
| `POST` | `/api/queue/caller/windows/select` | 未接入 | `Header.Authorization`、`body.windowUid` | `R<CallerWindowBindingResponse>` | 绑定窗口 |
### 3.11 `pad.callTerminal`
| 方法 | 请求地址 | 网关调用(tag/path) | 请求参数 | 返回值 | 备注 |
|---|---|---|---|---|---|
| `POST` | `/api/queue/caller/call-terminal/init` | 未接入 | `body.windowUid``body.empUid` 可选 | `R<CallTerminalActionResponse>` | 初始化评价器 |
| `POST` | `/api/queue/caller/call-terminal/call` | `pad.callTerminal` + `/call` | `body.windowUid``body.ticketUid`、`body.empUid` 可选 | `R<CallTerminalActionResponse>` | 叫号 |
| `POST` | `/api/queue/caller/call-terminal/recall` | 未接入 | `body.ticketUid``body.windowUid` 可选 | `R<CallTerminalActionResponse>` | 重呼 |
| `POST` | `/api/queue/caller/call-terminal/start` | 未接入 | `body.ticketUid``body.windowUid`、`body.empUid` 可选 | `R<CallTerminalActionResponse>` | 开始办理 |
| `POST` | `/api/queue/caller/call-terminal/complete` | 未接入 | `body.ticketUid` | `R<CallTerminalActionResponse>` | 办结 |
| `POST` | `/api/queue/caller/call-terminal/abandon` | 未接入 | `body.ticketUid` | `R<CallTerminalActionResponse>` | 弃号 |
| `POST` | `/api/queue/caller/call-terminal/transfer` | 未接入 | `body.ticketUid`、`body.targetWindowUid` | `R<CallTerminalActionResponse>` | 转移 |
| `POST` | `/api/queue/caller/call-terminal/pause` | 未接入 | `body.windowUid`、`body.empUid`、`body.pauseReason` | `R<CallTerminalActionResponse>` | 暂停窗口 |
| `POST` | `/api/queue/caller/call-terminal/resume` | 未接入 | `body.windowUid`、`body.empUid` | `R<CallTerminalActionResponse>` | 恢复窗口 |
| `POST` | `/api/queue/caller/call-terminal/evaluate` | 未接入 | `body.ticketUid`;如果提交评分,`body.rank` 必须在 `0-6` | `R<CallTerminalActionResponse>` | 发起评价或回写评价 |
| `GET` | `/api/queue/caller/call-terminal/is-rank` | 未接入 | `query.ticketUid` | `R<Map<String,Object>>` | 是否已评价 |
| `GET` | `/api/queue/caller/call-terminal/queue-count` | 未接入 | `query.windowUid` | `R<Map<String,Object>>` | 当前窗口排队人数 |
| `GET` | `/api/queue/caller/call-terminal/pool` | 未接入 | `query.winUid``query.keyword`、`query.keywords`、`query.status`、`query.page`、`query.size`、`query.pageSize`、`query.pagesize` 可选 | `R<CallTerminalTicketPoolResponse>` | 可叫号票池 |
`pad.callTerminal` 常见可选字段:
- `customText`
- `serviceUrl`
- `forward`
- `read`
- `driver`
- `clients`
- `rankUserName`
- `rankUserPhone`
- `idCard`
- `phone`
#### `pad.ticket` - 实名核验查询示例
请求示例:
```json
{
"name": "张",
"idCard": "3301",
"phone": "138",
"page": 1,
"size": 10
}
```
模糊查询规则:
- `name``LIKE %name%`
- `idCard``LIKE %idCard%`
- `phone``LIKE %phone%`
- 多个条件同时传入时按 `AND` 组合
- `takeTicketVerified` 复用当前取号实名校验逻辑,仅在传入 `idCard``phone` 时返回
- `faceComparePassed` 基于当前最新精确匹配记录的 `compareValue == 1` 判断
返回示例:
```json
{
"code": 200,
"msg": "查询成功",
"data": {
"page": 1,
"size": 10,
"total": 1,
"matched": true,
"takeTicketVerified": true,
"faceComparePassed": true,
"records": [
{
"uid": 1,
"ticketUid": 101,
"name": "张三",
"idCard": "330102199001011234",
"phone": "13800138000",
"compareCode": "IDC",
"compareValue": 1,
"compareResult": "verified",
"faceComparePassed": true,
"verifyTime": "2026-04-22T10:00:00"
}
]
}
}
```
## 4. `/public` 统一网关
### 4.1 入口
| 方法 | 请求地址 | 请求参数 | 返回值 | 备注 |
|---|---|---|---|---|
| `POST` | `/public` | 请求体为加密后的字符串;解密后结构见下文 | `PublicGatewayResponseVo<T>` | 统一网关入口 |
### 4.2 解密后的请求体结构
```json
{
"tag": "pad.ticket",
"map": {
"traceId": "202604210001",
"head": {
"method": "GET",
"contentType": "application/json",
"timestamp": 1710000000000,
"nonce": "n-1",
"signature": "hex-signature"
},
"path": "/list",
"query": {},
"body": {}
}
}
```
字段说明:
| 字段 | 说明 |
|---|---|
| `tag` | 路由标签,例如 `pad.auth`、`pad.ticket` |
| `map.traceId` | 链路跟踪号 |
| `map.head.method` | 请求方法;建议显式传 |
| `map.head.timestamp` | 签名时间戳 |
| `map.head.nonce` | 签名随机串 |
| `map.head.signature` | HMAC-SHA256 签名 |
| `map.path` | 子路径,例如 `/login`、`/list` |
| `map.query` | 查询参数对象 |
| `map.body` | 请求体对象 |
### 4.3 当前已接入 `/public` 的接口
| 网关 tag | `map.path` | 实际分发到的直连接口 | 直连接口返回 |
|---|---|---|---|
| `pad.auth` | `/login` | `POST /api/queue/pad/auth/login` | `R<LoginResponse>` |
| `pad.auth` | `/sign` | `POST /api/queue/pad/auth/sign` | `R<SignResponseVo>` |
| `pad.menu` | `/main` | `GET /api/queue/pad/menu/main` | `R<MenuPageVo>` |
| `pad.appointment` | `/time-slots` | `GET /api/queue/pad/appointment/time-slots` | `R<List<AppointmentTimeSlotVo>>` |
| `pad.hallSystem` | `/list` | `GET /api/queue/pad/hallSystem/list` | `R<HallSystemListVo>` |
| `pad.hallSystem` | `/value` | `POST /api/queue/pad/hallSystem/value` | `R<Boolean>` |
| `pad.hallSystem` | `/overview/metrics` | `GET /api/queue/pad/hallSystem/overview/metrics` | `R<PadOverviewMetricsVo>` |
| `pad.hallSystem` | `/overview/metrics/trend` | `GET /api/queue/pad/hallSystem/overview/metrics/trend` | `R<PadOverviewMetricsTrendVo>` |
| `pad.queue` | `/ticket/take` | `POST /api/queue/pad/ticket/take` | `R<TakeTicketVo>` |
| `pad.queue` | `/overview/metrics` | `GET /api/queue/pad/hallSystem/overview/metrics` | `R<PadOverviewMetricsVo>` |
| `pad.queue` | `/overview/metrics/trend` | `GET /api/queue/pad/hallSystem/overview/metrics/trend` | `R<PadOverviewMetricsTrendVo>` |
| `pad.business` | `/enabled` | `GET /api/queue/pad/business/enabled` | `R<List<Business>>` |
| `pad.ticket` | `/list` | `GET /api/queue/pad/ticket/list` | `R<TicketPageVo>` |
| `pad.window` | `/list` | `GET /api/queue/pad/window/list` | `R<WindowPageVo>` |
| `pad.window` | `/monitor/list` | `GET /api/queue/pad/window/monitor/list` | `R<WindowMonitorListVo>` |
| `pad.print` | `/printers` | `GET /api/queue/pad/print/printers` | `R<List<String>>` |
| `pad.print` | `/text` | `POST /api/queue/pad/print/text` | `R<Boolean>` |
| `pad.callTerminal` | `/call` | `POST /api/queue/caller/call-terminal/call` | `R<CallTerminalActionResponse>` |
### 4.4 `/public` 调用规则
-`pad.auth /login``pad.auth /sign` 外,其余已接入网关的接口都需要 `map.head.timestamp`、`map.head.nonce`、`map.head.signature`
- `POST` 类接口建议显式传 `map.head.method`
- `pad.auth /sign` 在实际使用时还需要 Bearer Token
## 5. 常见返回字段说明
### 5.1 `LoginResponse`
主要字段:
- `access_token`
- `refresh_token`
- `tokenType`
- `expire_in`
- `refresh_expire_in`
- `client_id`
- `scope`
- `openid`
- `userInfo`
`userInfo` 主要字段:
- `id`
- `uid`
- `username`
- `realName`
- `role`
- `tenantId`
- `image`
### 5.2 `Business`
主要字段:
- `uid`
- `prefix`
- `name`
- `enabled`
- `type`
- `handleCount`
- `isSpecial`
### 5.3 `TakeTicketVo` / `TakeTicketResponse`
主要字段:
- `uid`
- `tktId`
- `tktIntid`
- `status`
- `bizUid`
- `bizName`
- `bizPrefix`
- `waitingCount`
- `waitingAhead`
- `estimatedWaitMinutes`
- `tktDate`
- `tktTime`
- `hallName`
- `windowNames`
- `message`
### 5.4 `TicketPageVo`
主要字段:
- `list`
- `total`
- `page`
- `size`
`list` 元素类型为 `UnifiedTicketVo`
### 5.5 `TicketStatusVo`
主要字段:
- `uid`
- `tktId`
- `status`
- `statusText`
- `waitingAhead`
- `estimatedWaitMinutes`
### 5.6 `TicketStatusDetailVo`
主要字段:
- `ticketNumber`
- `uid`
- `businessUid`
- `status`
- `rank`
- `customerName`
- `customerPhone`
- `generateTime`
- `windowId`
### 5.7 `WaitingCountVo`
主要字段:
- `waitingCount`
- `estimatedWaitMinutes`
- `bizUid`
### 5.8 `WindowPageVo`
主要字段:
- `list`
- `total`
- `page`
- `size`
- `enabled`
- `name`
### 5.9 `WindowActionVo`
主要字段:
- `windowId`
- `name`
- `ledAddress`
- `enabled`
- `createTime`
- `displayText`
- `businessCount`
### 5.10 `WindowDetailVo`
主要字段:
- `windowId`
- `name`
- `ledAddress`
- `ledText`
- `enabled`
- `sid`
- `rankMode`
- `rankAddress`
- `currentTicket`
- `todayServed`
### 5.11 `WindowBusinessListVo`
主要字段:
- `windowId`
- `list`
### 5.12 `WindowMonitorListVo`
主要字段:
- `list`
- `idleCount`
- `busyCount`
- `pausedCount`
### 5.13 `HallSystemListVo`
主要字段:
- `list`
- `total`
`list` 元素 `HallSystemItemVo` 主要字段:
- `key`
- `value`
- `memo`
### 5.14 `PadOverviewMetricsVo`
主要字段:
- `waitingCount`
- `todayAppointmentCount`
- `idleWindowCount`
- `idleKioskCount`
- `serverTime`
### 5.15 `PadOverviewMetricsTrendVo`
主要字段:
- `startTime`
- `endTime`
- `list`
### 5.16 `AppointmentPageVo`
主要字段:
- `list`
- `total`
- `page`
- `size`
### 5.17 `AppointmentActionVo`
主要字段:
- `appointmentId`
- `newStatus`
### 5.18 `AppointmentStatisticsVo`
主要字段:
- `totalAppointments`
- `todayAppointments`
- `completedAppointments`
- `cancelledAppointments`
- `timeSlotStats`
### 5.19 `CallerWindowBindingResponse`
主要字段:
- `locked`
- `needSelect`
- `selectedWindowUid`
- `selectedWindowCode`
- `selectedWindowName`
- `nextStep`
- `windows`
### 5.20 `CallTerminalActionResponse`
主要字段:
- `action`
- `success`
- `message`
- `ticketUid`
- `ticketNo`
- `ticketStatus`
- `ticketStatusText`
- `windowUid`
- `windowName`
- `resumeToken`
- `led`
- `taxerName`
- `taxerPhone`
- `waitSeconds`
### 5.21 `CallTerminalTicketPoolResponse`
主要字段:
- `winUid`
- `keyword`
- `status`
- `page`
- `size`
- `total`
- `returnedCount`
- `list`