# 交易数据接口
**本文引用的文件**
- [TransFundFlowController.java](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFundFlowController.java)
- [TransFastFundFlowController.java](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFastFundFlowController.java)
- [TransFixedDepositController.java](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFixedDepositController.java)
- [TransFinancialController.java](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFinancialController.java)
- [CashKeyController.java](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/CashKeyController.java)
- [TransRecordController.java](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransRecordController.java)
## 目录
1. [引言](#引言)
2. [项目结构与控制器总览](#项目结构与控制器总览)
3. [核心业务关系说明](#核心业务关系说明)
4. [接口总表](#接口总表)
5. [按账户查询交易示例](#按账户查询交易示例)
6. [按人员查询交易示例](#按人员查询交易示例)
7. [分页、排序与通用响应](#分页排序与通用响应)
8. [错误码与排查指南](#错误码与排查指南)
9. [高频、大额、敏感交易在调查中的作用](#高频大额敏感交易在调查中的作用)
10. [结论](#结论)
## 引言
本文面向使用后端交易数据的开发者、分析师和调查人员,整理交易相关控制器的对外 API。重点覆盖:
- 资金流水
- 快速流水
- 固定存款
- 金融关键词统计
- 现金关键字配置
- 以及后续扩展的大额、频率、连续、卡持、敏感等交易分析接口
每个接口均说明 HTTP 方法、URL、请求体结构、主要返回字段、分页方式、排序方式和常见错误处理思路,并补充交易数据与人员、账户、交易对手、治理树之间的关系说明。
## 项目结构与控制器总览
交易类接口集中在 `com.zsjz.ai.module.trans.controller` 包下,采用 Spring REST 风格,统一通过 POST 或 GET 暴露,并以统一结果对象包装返回。
```mermaid
graph TB
subgraph "交易控制器层"
TF["TransFundFlowController
资金流向"]
TFF["TransFastFundFlowController
快速流水"]
TFD["TransFixedDepositController
固定存款"]
TFT["TransFinancialController
金融分析"]
CK["CashKeyController
现金关键字配置"]
TR["TransRecordController
交易记录"]
end
subgraph "服务层与模型"
SVC["Service 业务逻辑"]
DTO["DTO/Query 请求与响应对象"]
end
TF --> SVC
TFF --> SVC
TFD --> SVC
TFT --> SVC
CK --> SVC
TR --> SVC
SVC --> DTO
```
**图示来源**
- [TransFundFlowController.java:1-60](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFundFlowController.java#L1-L60)
- [TransFastFundFlowController.java:1-35](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFastFundFlowController.java#L1-L35)
- [TransFixedDepositController.java:1-55](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFixedDepositController.java#L1-L55)
- [TransFinancialController.java:1-36](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFinancialController.java#L1-L36)
- [CashKeyController.java:1-58](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/CashKeyController.java#L1-L58)
- [TransRecordController.java](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransRecordController.java)
**章节来源**
- [TransFundFlowController.java:1-60](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFundFlowController.java#L1-L60)
- [TransFastFundFlowController.java:1-35](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFastFundFlowController.java#L1-L35)
- [TransFixedDepositController.java:1-55](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFixedDepositController.java#L1-L55)
- [TransFinancialController.java:1-36](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFinancialController.java#L1-L36)
- [CashKeyController.java:1-58](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/CashKeyController.java#L1-L58)
- [TransRecordController.java](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransRecordController.java)
## 核心业务关系说明
交易数据在系统中通常围绕以下实体展开:
- 人员:交易发起方或受益方的自然人或单位主体。
- 账户:银行账户、卡号、电子钱包账号等资金载体。
- 交易对手:交易的另一方,可能是账户、人员或机构。
- 治理树:组织、案件、任务或调查对象的层级结构,用于权限、范围和数据归属划分。
典型关系如下:
```mermaid
erDiagram
PERSON ||--o{ ACCOUNT : "拥有或关联"
ACCOUNT ||--o{ TRANSACTION : "发生交易"
PERSON ||--o{ TRANSACTION : "作为交易一方"
TRANSACTION ||--o{ COUNTERPARTY : "对应交易对手"
GOVERN_TREE ||--o{ TRANSACTION : "数据归属或权限范围"
```
该关系有助于理解不同接口的查询维度:
- 按账户查询:适合追踪资金进出路径、对手账户分布、快转和资金流向。
- 按人员查询:适合刻画人员资金画像、高频交易对手、敏感交易特征。
- 结合治理树:可限定某个案件、组织或调查范围内的交易数据。
**图示来源**
- [TransFundFlowController.java:1-60](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFundFlowController.java#L1-L60)
- [TransFastFundFlowController.java:1-35](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFastFundFlowController.java#L1-L35)
- [TransFixedDepositController.java:1-55](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFixedDepositController.java#L1-L55)
- [TransFinancialController.java:1-36](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFinancialController.java#L1-L36)
## 接口总表
### 资金流向接口
- **基础信息**
- 控制器:`TransFundFlowController`
- 根路径:`/trans/fundsFlow`
- 认证与鉴权:由系统统一拦截器或网关控制;调用前需具备相应案件或数据源权限。
| 序号 | 方法 | URL | 请求体类型 | 主要用途 | 主要返回字段 | 分页 | 排序 |
|---|---|---|---|---|---|---|---|
| 1 | POST | `/trans/fundsFlow/getTransFundFlowPage` | `TransRecordQuery` | 分页查询资金流向数据 | 资金流向列表、总数、当前页、每页条数 | 支持 | 通常依赖 Query 中的排序字段 |
| 2 | POST | `/trans/fundsFlow/graph` | `TransFlowGraphQuery` | 资金流向图分析 | 树形节点、节点关系、汇总金额 | 不适用 | 不适用 |
| 3 | POST | `/trans/fundsFlow/trace` | `TransFlowGraphQuery` | 资金流向追溯分析 | 追溯链、上游下游账户、关键中转节点 | 不适用 | 不适用 |
- **请求参数要点**
- 资金流向分页接口使用 `TransRecordQuery`,通常包含账户、人员、时间范围、金额范围、交易对手、治理范围等筛选条件。
- 图和追溯接口使用 `TransFlowGraphQuery`,通常以账户或人员为起点,限制深度、时间范围和金额阈值。
- **响应字段要点**
- 分页接口返回 MyBatis-Plus 的 `Page` 对象,包含列表、总数、页码、每页大小等。
- 图和追溯接口返回 `TransFlowDTO`,用于展示资金流动拓扑。
**章节来源**
- [TransFundFlowController.java:1-60](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFundFlowController.java#L1-L60)
### 快速流水接口
- **基础信息**
- 控制器:`TransFastFundFlowController`
- 根路径:`/trans/fastFundFlow`
- 业务含义:快速资金流转,常用于识别快进快出、分散转入集中转出等可疑行为。
| 序号 | 方法 | URL | 请求体类型 | 主要用途 | 主要返回字段 | 分页 | 排序 |
|---|---|---|---|---|---|---|---|
| 1 | POST | `/trans/fastFundFlow/statFirstTransFastFundFlow` | `TransFastFundFlowQuery` | 统计首次资金快转流水 | 银行统计、交易明细、首笔快转标识 | 不适用 | 不适用 |
- **请求参数要点**
- 通常包含人员卡号、时间范围、金额阈值、快转判定规则等。
- 适用于对指定人员在指定时间内的快转行为进行定位。
- **响应字段要点**
- 返回 `TransFastFundFlowDTO`,包含银行维度的统计信息和具体交易明细。
**章节来源**
- [TransFastFundFlowController.java:1-35](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFastFundFlowController.java#L1-L35)
### 固定存款接口
- **基础信息**
- 控制器:`TransFixedDepositController`
- 根路径:`/trans/fixedDeposit`
- 业务含义:定期存款属于中长期资金沉淀,常用于识别资金存放、资产固化、规避短期监控等行为。
| 序号 | 方法 | URL | 请求体类型 | 主要用途 | 主要返回字段 | 分页 | 排序 |
|---|---|---|---|---|---|---|---|
| 1 | POST | `/trans/fixedDeposit/statFirstTransFixedDeposit` | `TransFixedDepositQuery` | 统计首层定期存款汇总 | 人员姓名、账户、收入总额、支出总额 | 否 | 否 |
| 2 | POST | `/trans/fixedDeposit/statSecondTransFixedDepositList` | `TransFixedDepositQuery` | 统计第二层定期存款明细 | 明细列表、账户变动明细 | 是 | 是 |
- **请求参数要点**
- 通常包含人员姓名、日期范围、账户、治理范围、分页和排序字段。
- 第一层接口侧重人员汇总;第二层接口侧重账户级明细。
- **响应字段要点**
- 第一层返回 `List`。
- 第二层返回 `Page`,包含分页字段。
**章节来源**
- [TransFixedDepositController.java:1-55](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFixedDepositController.java#L1-L55)
### 金融分析接口
- **基础信息**
- 控制器:`TransFinancialController`
- 根路径:`/trans/financial`
- 业务含义:根据金融关键词或分类对交易进行统计,辅助发现特定金融行为模式。
| 序号 | 方法 | URL | 请求体类型 | 主要用途 | 主要返回字段 | 分页 | 排序 |
|---|---|---|---|---|---|---|---|
| 1 | POST | `/trans/financial/statFirstTransFinancial` | `TransFinancialQuery` | 统计首笔交易金融数据 | 金融统计项、金额、频次、账户或人员聚合 | 是 | 是 |
- **请求参数要点**
- 通常包含分页参数、金融关键词、账户、人员、时间范围、治理范围等。
- **响应字段要点**
- 返回 `Page`,适合前端表格分页展示。
**章节来源**
- [TransFinancialController.java:1-36](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFinancialController.java#L1-L36)
### 现金关键字配置接口
- **基础信息**
- 控制器:`CashKeyController`
- 根路径:`/trans/cashKey`
- 业务含义:管理“现金”相关的关键词配置,用于后续现金交易识别、清洗或分析。
| 序号 | 方法 | URL | 请求体类型 | 主要用途 | 主要返回字段 | 分页 | 排序 |
|---|---|---|---|---|---|---|---|
| 1 | GET | `/trans/cashKey/list` | 无 | 获取所有现金关键字 | 现金关键字列表 | 否 | 否 |
| 2 | POST | `/trans/cashKey/createOrUpdate` | `TransCashKey` | 创建或更新现金关键字 | 布尔值,表示是否成功 | 否 | 否 |
| 3 | GET | `/trans/cashKey/delete` | `id` 查询参数 | 根据 ID 删除现金关键字 | 布尔值,表示是否成功 | 否 | 否 |
- **请求参数要点**
- 创建或更新接口传入 `TransCashKey` 实体,通常包含 ID、关键字内容、启用状态等。
- 删除接口通过 URL 查询参数 `id` 指定要删除的记录。
- **响应字段要点**
- 列表返回 `List`。
- 写操作返回 `Boolean`,表示保存或删除是否成功。
**章节来源**
- [CashKeyController.java:1-58](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/CashKeyController.java#L1-L58)
### 其他交易分析接口(扩展说明)
以下控制器在当前仓库中已存在,但本文未逐行展开其源码。实际使用时应参考对应 Controller、Service、DTO 和 Mapper 定义确认具体字段和行为:
- 大额交易:`TransBigController`、`TransBigService`、`TransBigQuery`、`TransBigDTO`
- 频率交易:`TransFrequencyController`、`TransFrequencyService`、`TransFrequencyQuery`、`TransFrequencyDTO`
- 连续交易:`TransContinuousController`、`TransContinuousService`、`TransContinuousQuery`、`TransContinuousDTO`
- 卡持交易:`TransCardHoldController`、`TransCardHoldService`
- 敏感交易:`TransSensitiveController`、`TransSensitiveService`、`TransSensitiveDTO`
- 交易记录:`TransRecordController`、`TransRecordService`、`TransRecordQuery`、`TransRecord`
这些接口通常遵循相同约定:
- 查询接口多使用 POST + JSON 请求体。
- 列表接口多返回 `Page`。
- 写操作多返回 `Result` 或 `Result`。
- 分页字段通常为 `current`、`size`、`total`、`pages`、`records`。
- 排序字段通常在 Query 对象中提供,如 `sortField`、`orderDirection`。
**章节来源**
- [TransRecordController.java](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransRecordController.java)
## 按账户查询交易示例
以资金流向分页接口为例,说明如何按账户查询交易。
- **HTTP 方法**:POST
- **URL**:`/trans/fundsFlow/getTransFundFlowPage`
- **请求体示例**
```json
{
"account": "示例账户",
"startTime": "2025-01-01 00:00:00",
"endTime": "2025-12-31 23:59:59",
"minAmount": 0,
"maxAmount": 1000000,
"current": 1,
"size": 20
}
```
- **主要字段说明**
- `account`:账户或卡号,用于限定交易主体。
- `startTime`、`endTime`:时间范围,必须满足时间格式要求。
- `minAmount`、`maxAmount`:金额范围,用于过滤小额或异常大额交易。
- `current`、`size`:分页参数。
- **响应示例**
```json
{
"code": 200,
"message": "success",
"data": {
"records": [],
"total": 0,
"current": 1,
"size": 20
}
}
```
- **注意事项**
- 如果时间范围过长或数据量过大,建议先缩小时间窗口或增加金额、对手、治理范围等筛选条件。
- 若需要进一步分析资金去向,可继续调用 `/trans/fundsFlow/graph` 或 `/trans/fundsFlow/trace`。
**章节来源**
- [TransFundFlowController.java:1-60](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFundFlowController.java#L1-L60)
## 按人员查询交易示例
以快速流水接口为例,说明如何按人员查询资金快转行为。
- **HTTP 方法**:POST
- **URL**:`/trans/fastFundFlow/statFirstTransFastFundFlow`
- **请求体示例**
```json
{
"personId": "示例人员ID",
"cardNo": "示例卡号",
"startTime": "2025-06-01 00:00:00",
"endTime": "2025-06-30 23:59:59",
"thresholdAmount": 50000
}
```
- **主要字段说明**
- `personId`:人员标识。
- `cardNo`:人员关联的银行卡号。
- `startTime`、`endTime`:快转行为观察窗口。
- `thresholdAmount`:快转金额阈值,用于判断是否构成快速流转。
- **响应示例**
```json
{
"code": 200,
"message": "success",
"data": {
"bankStats": [],
"transactionDetails": []
}
}
```
- **调查意义**
- 快速流水常用于识别“快进快出”“分散转入、集中转出”等可疑资金行为。
- 结合人员画像和交易对手网络,可进一步判断是否存在洗钱、转移资产或规避监管行为。
**章节来源**
- [TransFastFundFlowController.java:1-35](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFastFundFlowController.java#L1-L35)
## 分页、排序与通用响应
### 分页约定
- 分页接口通常返回 `Page`,字段包括:
- `records`:当前页数据列表。
- `total`:符合条件的总记录数。
- `current`:当前页码。
- `size`:每页条数。
- `pages`:总页数。
- 推荐分页策略:
- 默认 `current=1`、`size=20`。
- 大数据量场景建议 `size≤100`。
- 前端应根据 `total` 计算总页数并禁用无效页码。
### 排序约定
- 排序参数通常位于 Query 对象中,例如:
- `sortField`:排序字段名。
- `orderDirection`:升序或降序。
- 常见排序字段:
- 交易时间:按最近交易优先。
- 金额:按金额绝对值或净额排序。
- 账户或人员:按主体名称或编号排序。
### 通用响应结构
大多数接口返回统一包装对象,典型结构如下:
```json
{
"code": 200,
"message": "success",
"data": {}
}
```
- `code`:业务状态码。
- `message`:提示信息。
- `data`:业务数据,可能是列表、分页对象、树形结构或布尔值。
**章节来源**
- [TransFundFlowController.java:1-60](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFundFlowController.java#L1-L60)
- [TransFixedDepositController.java:1-55](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFixedDepositController.java#L1-L55)
- [TransFinancialController.java:1-36](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFinancialController.java#L1-L36)
- [CashKeyController.java:1-58](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/CashKeyController.java#L1-L58)
## 错误码与排查指南
### 常见错误场景
| 错误类型 | 可能原因 | 排查建议 |
|---|---|---|
| 请求参数缺失 | 未传必要字段,如账户、人员、时间范围 | 检查 JSON 字段名是否与接口定义一致 |
| 时间格式错误 | 时间字符串不符合服务端解析格式 | 使用标准日期时间格式,避免时区歧义 |
| 金额格式错误 | 金额字段为空、非数字或负数 | 校验最小值、最大值和数值类型 |
| 时间范围过长 | 查询跨度太大导致性能问题 | 缩短时间范围,分批次查询 |
| 数据量过大 | 未分页或分页 size 过大 | 调整 `current`、`size`,增加更多筛选条件 |
| 权限不足 | 当前用户无权访问该案件或数据源 | 检查登录身份、案件归属、数据源权限 |
| 配置缺失 | 现金关键字、金融关键词未配置 | 调用配置接口查看或新增关键字 |
### 排查流程
```mermaid
flowchart TD
Start["收到接口错误"] --> CheckParam["检查请求参数是否完整"]
CheckParam --> ParamValid{"参数是否合法"}
ParamValid -->|否| FixParam["修正字段名、类型或必填项"]
ParamValid -->|是| CheckTime["检查时间范围和时间格式"]
CheckTime --> TimeValid{"时间是否有效"}
TimeValid -->|否| FixTime["修正时间格式或缩短时间范围"]
TimeValid -->|是| CheckAmount["检查金额范围和格式"]
CheckAmount --> AmountValid{"金额是否有效"}
AmountValid -->|否| FixAmount["修正金额字段"]
AmountValid -->|是| CheckDataSize["检查数据量和分页设置"]
CheckDataSize --> SizeValid{"是否合理分页"}
SizeValid -->|否| AdjustPage["调整 current 和 size"]
SizeValid -->|是| CheckPermission["检查用户权限和数据源"]
CheckPermission --> PermValid{"是否有权限"}
PermValid -->|否| FixAuth["检查登录、案件和数据源权限"]
PermValid -->|是| LogCheck["查看后端日志和服务端错误"]
FixParam --> End["重新调用"]
FixTime --> End
FixAmount --> End
AdjustPage --> End
FixAuth --> End
LogCheck --> End
```
**图示来源**
- [TransFundFlowController.java:1-60](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFundFlowController.java#L1-L60)
- [TransFastFundFlowController.java:1-35](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFastFundFlowController.java#L1-L35)
- [TransFixedDepositController.java:1-55](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFixedDepositController.java#L1-L55)
- [TransFinancialController.java:1-36](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFinancialController.java#L1-L36)
- [CashKeyController.java:1-58](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/CashKeyController.java#L1-L58)
**章节来源**
- [TransFundFlowController.java:1-60](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFundFlowController.java#L1-L60)
- [TransFastFundFlowController.java:1-35](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFastFundFlowController.java#L1-L35)
- [TransFixedDepositController.java:1-55](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFixedDepositController.java#L1-L55)
- [TransFinancialController.java:1-36](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFinancialController.java#L1-L36)
- [CashKeyController.java:1-58](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/CashKeyController.java#L1-L58)
## 高频、大额、敏感交易在调查中的作用
### 高频交易
- **典型表现**
- 同一账户在短时间内频繁转账。
- 同一人员与多个交易对手反复发生交易。
- **调查价值**
- 识别经营性账户异常、洗钱通道、资金池归集。
- 结合频率分析接口可发现异常活跃账户和人员。
### 大额交易
- **典型表现**
- 单笔或累计金额超过阈值。
- 短时间内出现多笔接近阈值的大额交易。
- **调查价值**
- 识别大额资产转移、逃避监管、套现或非法资金结算。
- 大额接口通常配合金额阈值、时间窗口和对手分析。
### 敏感交易
- **典型表现**
- 涉及敏感关键词、敏感地区、敏感对手或敏感时间。
- 与现金、地下钱庄、虚拟货币、跨境资金等相关联。
- **调查价值**
- 敏感接口可用于标记高风险交易线索。
- 常与高频、大额、快速流水组合使用,形成风险画像。
```mermaid
flowchart TD
Raw["原始交易数据"] --> HighFreq["高频交易分析"]
Raw --> BigAmt["大额交易分析"]
Raw --> Sensitive["敏感交易分析"]
HighFreq --> RiskProfile["风险画像"]
BigAmt --> RiskProfile
Sensitive --> RiskProfile
RiskProfile --> Investigation["调查分析与取证"]
```
[本图为概念性流程图,不直接映射具体源码文件]
**章节来源**
- [TransFastFundFlowController.java:1-35](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFastFundFlowController.java#L1-L35)
- [TransFinancialController.java:1-36](file://ai-server/src/main/java/com/zsjz/ai/module/trans/controller/TransFinancialController.java#L1-L36)
## 结论
交易数据接口体系以账户、人员、交易对手和治理范围为基本查询维度,提供资金流向、快速流水、固定存款、金融分析、现金关键字配置等能力。实际使用中应:
- 优先明确查询目标:是按账户追踪资金路径,还是按人员刻画资金行为。
- 严格控制时间范围和金额范围,避免一次性拉取过多数据。
- 合理使用分页和排序,保证前端展示和后端性能。
- 将高频、大额、敏感交易结合分析,构建更完整的调查线索。
- 遇到问题时,从参数、时间、金额、分页、权限、配置和日志六个方向逐步排查。