# 轨迹数据接口
**本文引用的文件**
- [TrackTogetherTravelController.java](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackTogetherTravelController.java)
- [TrackTogetherLiveController.java](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackTogetherLiveController.java)
- [TrackMeetController.java](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackMeetController.java)
- [TrackEnLocalController.java](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackEnLocalController.java)
- [TrackCellTowerController.java](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackCellTowerController.java)
- [ExpressInfoController.java](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/ExpressInfoController.java)
- [Query.java](file://ai-server/src/main/java/com/zsjz/ai/common/base/Query.java)
- [Result.java](file://ai-server/src/main/java/com/zsjz/ai/common/config/Result.java)
- [TrackTogetherTravelQuery.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/query/TrackTogetherTravelQuery.java)
- [TrackTogetherLiveQuery.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/query/TrackTogetherLiveQuery.java)
- [TogetherLiveDetailQuery.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/query/TogetherLiveDetailQuery.java)
- [TrackMeetQuery.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/query/TrackMeetQuery.java)
- [TrackEnLocalQuery.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/query/TrackEnLocalQuery.java)
- [TrackCellTowerQuery.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/query/TrackCellTowerQuery.java)
- [ExpressInfoQuery.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/query/ExpressInfoQuery.java)
- [TravelTimelineDTO.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/dto/TravelTimelineDTO.java)
- [TravelRecordDTO.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/dto/TravelRecordDTO.java)
- [TrackPersonTogetherLiveDTO.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/dto/TrackPersonTogetherLiveDTO.java)
- [TogetherLiveDTO.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/dto/TogetherLiveDTO.java)
- [HotelStayInfo.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/entity/HotelStayInfo.java)
- [TogetherLiveInfo.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/entity/TogetherLiveInfo.java)
- [TrackMeetSummeryDTO.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/dto/TrackMeetSummeryDTO.java)
- [TrackMeetDTO.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/dto/TrackMeetDTO.java)
- [TrackEnLocalDTO.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/dto/TrackEnLocalDTO.java)
- [TrackCellTowerDTO.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/dto/TrackCellTowerDTO.java)
- [TrackCellTowerSecondDTO.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/dto/TrackCellTowerSecondDTO.java)
- [ExpressDTO.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/dto/ExpressDTO.java)
- [ExpressInfo.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/entity/ExpressInfo.java)
## 目录
1. [文档目标与适用范围](#文档目标与适用范围)
2. [系统边界与调用约定](#系统边界与调用约定)
3. [控制器总览](#控制器总览)
4. [通用查询与分页模型](#通用查询与分页模型)
5. [同行轨迹接口](#同行轨迹接口)
6. [同住轨迹接口](#同住轨迹接口)
7. [见面轨迹接口](#见面轨迹接口)
8. [本地活动轨迹接口](#本地活动轨迹接口)
9. [基站轨迹接口](#基站轨迹接口)
10. [快递信息接口](#快递信息接口)
11. [人员关联与时空调查支持](#人员关联与时空调查支持)
12. [按人员或时间范围查询示例](#按人员或时间范围查询示例)
13. [错误码与响应结构](#错误码与响应结构)
14. [数据缺失、坐标无效、时间异常排查指南](#数据缺失坐标无效时间异常排查指南)
15. [性能与使用建议](#性能与使用建议)
16. [结论](#结论)
## 文档目标与适用范围
本文件面向后端接口使用者、前端开发者和数据分析人员,说明轨迹数据接口的用途、参数、返回结构、分页方式和常见排错方法。覆盖以下六类轨迹能力:
- 同行:统计两人或多人的出行同行关系。
- 同住:统计旅馆住宿和同住服务中的同住关系。
- 见面:基于基站区域和时间窗口分析人员碰面。
- 同城/本地活动:统计境外人员在本地活动轨迹。
- 基站:按基站、LAC、CID 统计通信轨迹。
- 快递:按收件人、寄件人、地址等维度统计快递收发轨迹。
这些接口主要服务于人员关联分析和时空调查:通过“谁在什么时间出现在哪里”“谁和谁在一起”两条线索,串联人员、通话、交易和治理树等业务对象,形成可追溯的时空证据链。
## 系统边界与调用约定
- 所有轨迹控制器均位于 `com.zsjz.ai.module.track.controller` 包下。
- 请求统一使用 `POST`,请求体为 JSON。
- 返回值统一封装在 `Result` 中。
- 分页接口返回 MyBatis-Plus 的 `Page` 类型;非分页接口返回列表、映射或具体 DTO。
- 查询条件大多继承自通用基类 `Query`,因此分页、排序、日期范围等字段可复用。
```mermaid
graph TB
Client["客户端"] --> Gateway["网关或业务入口"]
Gateway --> TogetherTravel["同行控制器
/track/togetherTravel"]
Gateway --> TogetherLive["同住控制器
/track/togetherLive"]
Gateway --> Meet["见面控制器
/track/meet"]
Gateway --> EnLocal["本地活动控制器
/track/enLocal"]
Gateway --> CellTower["基站控制器
/track/cellTower"]
Gateway --> Express["快递控制器
/expressInfo"]
```
**图表来源**
- [TrackTogetherTravelController.java:1-48](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackTogetherTravelController.java#L1-L48)
- [TrackTogetherLiveController.java:1-70](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackTogetherLiveController.java#L1-L70)
- [TrackMeetController.java:1-50](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackMeetController.java#L1-L50)
- [TrackEnLocalController.java:1-46](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackEnLocalController.java#L1-L46)
- [TrackCellTowerController.java:1-49](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackCellTowerController.java#L1-L49)
- [ExpressInfoController.java:1-49](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/ExpressInfoController.java#L1-L49)
## 控制器总览
| 控制器 | 基础路径 | 主要职责 | 是否分页 |
|---|---|---|---|
| 同行轨迹控制器 | `/track/togetherTravel` | 统计同行旅行时间线、二次记录、三次同行 | 否 |
| 同住轨迹控制器 | `/track/togetherLive` | 首次同住统计、二次同住详情、旅馆住宿详情、同住服务详情 | 是(详情接口) |
| 见面轨迹控制器 | `/track/meet` | 首次碰面汇总、二次碰面明细 | 否 |
| 本地活动轨迹控制器 | `/track/enLocal` | 首次本地活动分组统计、二次明细 | 是(二次明细) |
| 基站轨迹控制器 | `/track/cellTower` | 首次基站轨迹统计、二次基站轨迹统计 | 是 |
| 快递信息控制器 | `/expressInfo` | 一级聚合统计、二级明细统计 | 是 |
**章节来源**
- [TrackTogetherTravelController.java:1-48](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackTogetherTravelController.java#L1-L48)
- [TrackTogetherLiveController.java:1-70](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackTogetherLiveController.java#L1-L70)
- [TrackMeetController.java:1-50](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackMeetController.java#L1-L50)
- [TrackEnLocalController.java:1-46](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackEnLocalController.java#L1-L46)
- [TrackCellTowerController.java:1-49](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackCellTowerController.java#L1-L49)
- [ExpressInfoController.java:1-49](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/ExpressInfoController.java#L1-L49)
## 通用查询与分页模型
所有轨迹查询条件大多继承 `Query`,因此以下字段通常可用:
| 字段 | 类型 | 含义 | 默认值或说明 |
|---|---|---|---|
| `page` | `long` | 当前页码 | 默认 `1` |
| `limit` | `long` | 每页条数 | 默认 `20` |
| `startDate` | `LocalDate` | 开始日期 | 用于按日期范围过滤 |
| `endDate` | `LocalDate` | 结束日期 | 用于按日期范围过滤 |
| `orderKey` | `String` | 排序字段 | 仅写入,不参与序列化 |
| `sort` | `String` | 排序方式 | 默认升序 |
| `tableName` | `String` | 表名 | 不参与 JSON 序列化 |
| `personName` | `String` | 本方姓名 | 常用于以被调查对象为中心筛选 |
| `personNames` | `List` | 本方姓名列表 | 多人员筛选 |
| `keyword` | `String` | 关键词搜索 | 仅写入,不参与序列化 |
**章节来源**
- [Query.java:1-86](file://ai-server/src/main/java/com/zsjz/ai/common/base/Query.java#L1-L86)
## 同行轨迹接口
### 统计同行时间线
- **HTTP 方法**:`POST`
- **URL**:`/track/togetherTravel/statTogetherTravel`
- **请求体**:`TrackTogetherTravelQuery`
- **返回**:`Result>`
#### 请求字段
| 字段 | 类型 | 必填 | 含义 |
|---|---|---:|---|
| `personCertNos` | `List` | 否 | 多人身份证号集合 |
| `personCertNo` | `String` | 否 | 单人身份证号 |
| `ids` | `List` | 否 | 数据 ID 列表 |
| `type` | `String` | 否 | 同行类型标识 |
| `id` | `String` | 否 | 单条数据 ID |
#### 返回字段
| 字段 | 类型 | 含义 |
|---|---|---|
| `personName` | `String` | 被调查对象姓名 |
| `companionName` | `String` | 同行人姓名 |
| `count` | `Integer` | 同行次数 |
| `idList` | `List` | 关联详细记录的 ID 列表 |
#### 适用场景
- 快速查看两名人员之间的同行频率。
- 通过 `idList` 进一步拉取同行明细,用于时间线可视化。
**章节来源**
- [TrackTogetherTravelController.java:1-48](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackTogetherTravelController.java#L1-L48)
- [TrackTogetherTravelQuery.java:1-27](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/query/TrackTogetherTravelQuery.java#L1-L27)
- [TravelTimelineDTO.java:1-56](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/dto/TravelTimelineDTO.java#L1-L56)
### 统计二次同行记录
- **HTTP 方法**:`POST`
- **URL**:`/track/togetherTravel/statSecondTogetherTravel`
- **请求体**:`TrackTogetherTravelQuery`
- **返回**:`Result>`
#### 返回字段
| 字段 | 类型 | 含义 |
|---|---|---|
| `tripDate` | `String` | 出行日期 |
| `data` | `List` | 该日期的出行数据列表 |
#### 适用场景
- 从时间线切换到按日期展开的具体出行记录。
- 结合人员、通话、交易数据做交叉验证。
**章节来源**
- [TrackTogetherTravelController.java:1-48](file://ai-server/src/main/java/com/zsjz/ai/module/track/controller/TrackTogetherTravelController.java#L1-L48)
- [TravelRecordDTO.java:1-26](file://ai-server/src/main/java/com/zsjz/ai/common/model/track/dto/TravelRecordDTO.java#L1-L26)
### 统计三次同行
- **HTTP 方法**:`POST`
- **URL**:`/track/togetherTravel/statThreeTogetherTravel`
- **请求体**:`TrackTogetherTravelQuery`
- **返回**:`Result