# 交易数据接口 **本文引用的文件** - [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) ## 结论 交易数据接口体系以账户、人员、交易对手和治理范围为基本查询维度,提供资金流向、快速流水、固定存款、金融分析、现金关键字配置等能力。实际使用中应: - 优先明确查询目标:是按账户追踪资金路径,还是按人员刻画资金行为。 - 严格控制时间范围和金额范围,避免一次性拉取过多数据。 - 合理使用分页和排序,保证前端展示和后端性能。 - 将高频、大额、敏感交易结合分析,构建更完整的调查线索。 - 遇到问题时,从参数、时间、金额、分页、权限、配置和日志六个方向逐步排查。