# 图谱与图表接口
**本文引用的文件**
- [GraphController.java](file://ai-server/src/main/java/com/zsjz/ai/module/graph/controller/GraphController.java)
- [GraphService.java](file://ai-server/src/main/java/com/zsjz/ai/module/graph/service/GraphService.java)
- [GraphQuery.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/graph/query/GraphQuery.java)
- [GraphTransDetailQuery.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/graph/query/GraphTransDetailQuery.java)
- [GraphCallDetailQuery.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/graph/query/GraphCallDetailQuery.java)
- [GraphHis.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/graph/entity/GraphHis.java)
- [analysis.ts](file://ai-electron/frontend/src/graph/api/analysis.ts)
- [graph/index.vue](file://ai-electron/frontend/src/graph/views/graph/index.vue)
## 目录
1. [引言](#引言)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [接口定义](#接口定义)
6. [业务实体关系](#业务实体关系)
7. [前端渲染方式](#前端渲染方式)
8. [大数据量性能注意事项](#大数据量性能注意事项)
9. [调用示例](#调用示例)
10. [故障排查](#故障排查)
11. [结论](#结论)
## 引言
本文面向后端接口使用者、前端开发者和数据分析人员,系统化说明 GraphController 暴露的图谱与图表相关 REST 接口。内容覆盖:
- 关系图数据查询、生成、导出和快照保存等能力;
- 图谱节点与边如何映射到人员、通话、交易等业务实体;
- 前端 AntV G6/X6、Relation Graph、ECharts 的渲染协作方式;
- 大数据量下的分页、过滤与导出策略;
- curl 与前端调用示例;
- 图谱为空、节点过多卡顿、导出失败等常见问题的排查方法。
## 项目结构
与图谱与图表接口直接相关的代码主要分布在以下位置:
- 后端控制器:`ai-server/src/main/java/com/zsjz/ai/module/graph/controller/GraphController.java`
- 后端服务实现:`ai-server/src/main/java/com/zsjz/ai/module/graph/service/GraphService.java`
- 查询模型:`GraphQuery`、`GraphTransDetailQuery`、`GraphCallDetailQuery`
- 历史记录实体:`GraphHis`
- 前端 API 封装:`ai-electron/frontend/src/graph/api/analysis.ts`
- 前端图谱页面:`ai-electron/frontend/src/graph/views/graph/index.vue`
```mermaid
graph TB
FE["前端页面
graph/index.vue"] --> API_TS["前端 API 封装
analysis.ts"]
API_TS --> CTRL["后端控制器
GraphController"]
CTRL --> SVC["后端服务
GraphService"]
SVC --> MAPPER["数据库访问层"]
SVC --> ENT_TRANS["交易记录
TransRecord"]
SVC --> ENT_CALL["通话记录
CallRecord"]
SVC --> ENT_HIS["图谱历史
GraphHis"]
```
**图示来源**
- [GraphController.java:1-131](file://ai-server/src/main/java/com/zsjz/ai/module/graph/controller/GraphController.java#L1-L131)
- [GraphService.java:1-200](file://ai-server/src/main/java/com/zsjz/ai/module/graph/service/GraphService.java#L1-L200)
- [analysis.ts:1239-1358](file://ai-electron/frontend/src/graph/api/analysis.ts#L1239-L1358)
- [graph/index.vue:6125-6223](file://ai-electron/frontend/src/graph/views/graph/index.vue#L6125-L6223)
**章节来源**
- [GraphController.java:1-131](file://ai-server/src/main/java/com/zsjz/ai/module/graph/controller/GraphController.java#L1-L131)
- [analysis.ts:1239-1358](file://ai-electron/frontend/src/graph/api/analysis.ts#L1239-L1358)
## 核心组件
- GraphController:对外暴露 `/graph/*` REST 接口,负责接收请求参数并返回统一响应体。
- GraphService:实现图谱生成、交易明细分页、通话明细分页、节点详情、图谱历史创建/删除/读取/写入等逻辑。
- 查询对象:
- GraphQuery:控制图谱类型(交易/通话)、金额范围、卡号、通话号码等条件。
- GraphTransDetailQuery:交易明细分页查询条件。
- GraphCallDetailQuery:通话明细分页查询条件。
- GraphHis:图谱历史记录的轻量实体,包含 id、graphName、path。
- 前端 analysis.ts:封装所有图谱相关 HTTP 调用,包括图谱分析、明细分页、历史管理、快照读写。
- graph/index.vue:用户交互入口,触发图谱分析、打开明细面板、保存和恢复图谱快照。
**章节来源**
- [GraphController.java:1-131](file://ai-server/src/main/java/com/zsjz/ai/module/graph/controller/GraphController.java#L1-L131)
- [GraphService.java:1-200](file://ai-server/src/main/java/com/zsjz/ai/module/graph/service/GraphService.java#L1-L200)
- [GraphQuery.java:1-22](file://ai-server/src/main/java/com/zsjz/ai/common/model/graph/query/GraphQuery.java#L1-L22)
- [GraphTransDetailQuery.java:1-37](file://ai-server/src/main/java/com/zsjz/ai/common/model/graph/query/GraphTransDetailQuery.java#L1-L37)
- [GraphCallDetailQuery.java:1-32](file://ai-server/src/main/java/com/zsjz/ai/common/model/graph/query/GraphCallDetailQuery.java#L1-L32)
- [GraphHis.java:1-14](file://ai-server/src/main/java/com/zsjz/ai/common/model/graph/entity/GraphHis.java#L1-L14)
- [analysis.ts:1239-1358](file://ai-electron/frontend/src/graph/api/analysis.ts#L1239-L1358)
## 架构总览
GraphController 作为统一入口,不直接处理复杂业务,而是委托 GraphService。图谱生成过程会构造 SQL,通过临时表或子查询聚合交易、通话、其他关系,最终返回节点集合与边集合。前端 analysis.ts 将业务表单字段转换为后端期望的 GraphViewQuery 结构,并调用对应接口。图谱页面 index.vue 负责组合 UI 行为,例如打开分析条件弹窗、切换图谱画布、保存历史快照。
```mermaid
sequenceDiagram
participant User as "用户"
participant Page as "graph/index.vue"
participant Api as "analysis.ts"
participant Ctrl as "GraphController"
participant Svc as "GraphService"
participant DB as "数据库"
User->>Page: "点击生成关系图谱"
Page->>Api: "调用 fetchGraphAnalysis"
Api->>Ctrl: "POST /graph/view"
Ctrl->>Svc: "graph(query)"
Svc->>DB: "执行图谱聚合 SQL"
DB-->>Svc: "边列表 edgeList"
Svc-->>Ctrl: "Map{nodeList, edgeList}"
Ctrl-->>Api: "Result