# 治理与其他业务接口
**本文引用的文件**
- [GovernController.java](file://ai-server/src/main/java/com/zsjz/ai/module/govern/controller/GovernController.java)
- [GovernTreeController.java](file://ai-server/src/main/java/com/zsjz/ai/module/govern/controller/GovernTreeController.java)
- [GovernService.java](file://ai-server/src/main/java/com/zsjz/ai/module/govern/serivce/GovernService.java)
- [GovernTreeService.java](file://ai-server/src/main/java/com/zsjz/ai/module/govern/serivce/GovernTreeService.java)
- [GovernConfService.java](file://ai-server/src/main/java/com/zsjz/ai/module/govern/serivce/GovernConfService.java)
- [SearchController.java](file://ai-server/src/main/java/com/zsjz/ai/module/otg/controller/SearchController.java)
- [TimeSeriesController.java](file://ai-server/src/main/java/com/zsjz/ai/module/otg/controller/TimeSeriesController.java)
- [SpecialDateController.java](file://ai-server/src/main/java/com/zsjz/ai/module/otg/controller/SpecialDateController.java)
- [DmController.java](file://ai-server/src/main/java/com/zsjz/ai/module/dm/controller/DmController.java)
- [SearchQueryService.java](file://ai-server/src/main/java/com/zsjz/ai/module/search/service/SearchQueryService.java)
- [TimeSeriesService.java](file://ai-server/src/main/java/com/zsjz/ai/module/otg/service/TimeSeriesService.java)
- [SpecialDateService.java](file://ai-server/src/main/java/com/zsjz/ai/module/otg/service/SpecialDateService.java)
- [DmService.java](file://ai-server/src/main/java/com/zsjz/ai/module/dm/service/DmService.java)
- [GovernTreeQuery.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/govern/query/GovernTreeQuery.java)
- [SearchDTO.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/otg/dto/SearchDTO.java)
- [SearchQuery.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/otg/query/SearchQuery.java)
- [TimeSeriesQuery.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/otg/query/TimeSeriesQuery.java)
- [SpecialDateRecord.java](file://ai-server/src/main/java/com/zsjz/ai/common/model/otg/entity/SpecialDateRecord.java)
## 目录
1. [引言](#引言)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细接口说明](#详细接口说明)
6. [依赖关系分析](#依赖关系分析)
7. [性能与并发特性](#性能与并发特性)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
## 引言
本文面向治理、搜索、时序、特殊日期和数据建模等跨模块业务接口,整理后端控制器与服务层职责,明确各接口的 HTTP 方法、URL、请求参数、响应结构、分页约定和错误行为。文档还解释:
- 治理树在调查组织关系建模中的作用;
- otg 模块中搜索与时间序列的使用场景;
- dm 数据建模接口如何辅助外部表、清洗流程与治理计算;
- 常见异常现象的根因定位方法。
## 项目结构
本项目的后端以 Spring Boot 为主,相关控制器位于 `module` 下的不同业务包中:
| 模块 | 主要职责 | 对应控制器 |
|---|---|---|
| govern | 数据治理任务调度、治理树查询、治理配置读写 | `GovernController`、`GovernTreeController` |
| otg | 搜索、时间序列、特殊日期等业务能力 | `SearchController`、`TimeSeriesController`、`SpecialDateController` |
| dm | 数据建模、文件预览、清洗、外部表与治理配置同步 | `DmController` |
```mermaid
graph TB
Client["前端或外部调用方"] --> GovernCtrl["GovernController
治理任务与 SSE"]
Client --> GovernTreeCtrl["GovernTreeController
治理树与关联分页"]
Client --> SearchCtrl["SearchController
全文检索"]
Client --> TimeSeriesCtrl["TimeSeriesController
时间序列"]
Client --> SpecialDateCtrl["SpecialDateController
特殊日期"]
Client --> DmCtrl["DmController
数据建模与清洗"]
GovernCtrl --> GovernSvc["GovernService"]
GovernTreeCtrl --> GovernTreeSvc["GovernTreeService"]
SearchCtrl --> SearchSvc["SearchQueryService"]
TimeSeriesCtrl --> TimeSeriesSvc["TimeSeriesService"]
SpecialDateCtrl --> SpecialDateSvc["SpecialDateService"]
DmCtrl --> DmSvc["DmService"]
```
**图示来源**
- [GovernController.java:1-72](file://ai-server/src/main/java/com/zsjz/ai/module/govern/controller/GovernController.java#L1-L72)
- [GovernTreeController.java:1-122](file://ai-server/src/main/java/com/zsjz/ai/module/govern/controller/GovernTreeController.java#L1-L122)
- [SearchController.java:1-26](file://ai-server/src/main/java/com/zsjz/ai/module/otg/controller/SearchController.java#L1-L26)
- [TimeSeriesController.java:1-37](file://ai-server/src/main/java/com/zsjz/ai/module/otg/controller/TimeSeriesController.java#L1-L37)
- [SpecialDateController.java:1-44](file://ai-server/src/main/java/com/zsjz/ai/module/otg/controller/SpecialDateController.java#L1-L44)
- [DmController.java:1-179](file://ai-server/src/main/java/com/zsjz/ai/module/dm/controller/DmController.java#L1-L179)
**章节来源**
- [GovernController.java:1-72](file://ai-server/src/main/java/com/zsjz/ai/module/govern/controller/GovernController.java#L1-L72)
- [GovernTreeController.java:1-122](file://ai-server/src/main/java/com/zsjz/ai/module/govern/controller/GovernTreeController.java#L1-L122)
- [SearchController.java:1-26](file://ai-server/src/main/java/com/zsjz/ai/module/otg/controller/SearchController.java#L1-L26)
- [TimeSeriesController.java:1-37](file://ai-server/src/main/java/com/zsjz/ai/module/otg/controller/TimeSeriesController.java#L1-L37)
- [SpecialDateController.java:1-44](file://ai-server/src/main/java/com/zsjz/ai/module/otg/controller/SpecialDateController.java#L1-L44)
- [DmController.java:1-179](file://ai-server/src/main/java/com/zsjz/ai/module/dm/controller/DmController.java#L1-L179)
## 核心组件
### 治理控制器
`GovernController` 暴露三类能力:
1. SSE 连接建立:`GET /govern/sse`;
2. SSE 控制通道:`GET /govern/sse/put`;
3. 启动治理计算任务:`GET /govern/calcTask`。
治理任务由异步线程执行,通过 SSE 推送进度。任务执行前会校验案件上下文,并通过进程内集合防止同一案件重复触发。
**章节来源**
- [GovernController.java:1-72](file://ai-server/src/main/java/com/zsjz/ai/module/govern/controller/GovernController.java#L1-L72)
- [GovernService.java:1-200](file://ai-server/src/main/java/com/zsjz/ai/module/govern/serivce/GovernService.java#L1-L200)
### 治理树控制器
`GovernTreeController` 提供治理树结构查询及多类关联数据的分页查询,包括:
- 治理树节点;
- 交易人员、银行卡;
- 通话人员、通话对方号码;
- 开户使用本人、开户使用对方信息。
所有分页接口返回统一包装结构,包含 `list` 和 `total` 两类键值,用于前端表格分页渲染。
**章节来源**
- [GovernTreeController.java:1-122](file://ai-server/src/main/java/com/zsjz/ai/module/govern/controller/GovernTreeController.java#L1-L122)
- [GovernTreeService.java:1-200](file://ai-server/src/main/java/com/zsjz/ai/module/govern/serivce/GovernTreeService.java#L1-L200)
### 搜索服务
`SearchController` 仅暴露一个列表接口,实际检索逻辑在 `SearchQueryService` 中完成,底层使用 Elasticsearch 进行全文检索,并按时间降序返回最多 500 条结果。
**章节来源**
- [SearchController.java:1-26](file://ai-server/src/main/java/com/zsjz/ai/module/otg/controller/SearchController.java#L1-L26)
- [SearchQueryService.java:1-108](file://ai-server/src/main/java/com/zsjz/ai/module/search/service/SearchQueryService.java#L1-L108)
### 时序服务
`TimeSeriesController` 提供时间序列列表、详情和跳转查询。时间序列数据通常用于按时间维度展示交易、通话等行为变化。
**章节来源**
- [TimeSeriesController.java:1-37](file://ai-server/src/main/java/com/zsjz/ai/module/otg/controller/TimeSeriesController.java#L1-L37)
- [TimeSeriesService.java:1-94](file://ai-server/src/main/java/com/zsjz/ai/module/otg/service/TimeSeriesService.java#L1-L94)
### 特殊日期服务
`SpecialDateController` 管理特殊日期记录,支持公历与农历,并可生成前后间隔区间,用于时间轴上的标记。
**章节来源**
- [SpecialDateController.java:1-44](file://ai-server/src/main/java/com/zsjz/ai/module/otg/controller/SpecialDateController.java#L1-L44)
- [SpecialDateService.java:1-118](file://ai-server/src/main/java/com/zsjz/ai/module/otg/service/SpecialDateService.java#L1-L118)
### 数据建模服务
`DmController` 是数据建模与清洗入口,覆盖文件预处理、Web 上传、原始数据预览、清洗任务、批次清理、文件列表、删除、提取数据计算以及治理配置读写。
**章节来源**
- [DmController.java:1-179](file://ai-server/src/main/java/com/zsjz/ai/module/dm/controller/DmController.java#L1-L179)
- [DmService.java:1-200](file://ai-server/src/main/java/com/zsjz/ai/module/dm/service/DmService.java#L1-L200)
## 架构总览
```mermaid
sequenceDiagram
participant FE as "前端"
participant Ctrl as "GovernController"
participant Svc as "GovernService"
participant SSE as "SseService"
participant DB as "数据源"
FE->>Ctrl: GET /govern/calcTask
Ctrl->>Ctrl: 校验案件上下文
Ctrl->>Svc: tryStartGovern(caseId)
alt 已有同案件任务
Svc-->>Ctrl: 失败
Ctrl-->>FE: 业务异常
else 允许启动
Svc-->>Ctrl: 成功
Ctrl->>Svc: calcTask(taskProcess, caseId, userId)
Note over Svc,DB: 异步执行治理流水线
Svc->>SSE: 推送进度消息
Svc->>DB: 写入治理树与中间表
SSE-->>FE: 实时进度
end
```
**图示来源**
- [GovernController.java:24-72](file://ai-server/src/main/java/com/zsjz/ai/module/govern/controller/GovernController.java#L24-L72)
- [GovernService.java:1-200](file://ai-server/src/main/java/com/zsjz/ai/module/govern/serivce/GovernService.java#L1-L200)
## 详细接口说明
### 治理任务接口
#### 启动治理计算任务
| 项目 | 说明 |
|---|---|
| HTTP 方法 | GET |
| URL | `/govern/calcTask` |
| 路径参数 | 无 |
| 查询参数 | `taskProcess`,可选,整数,表示任务进度基准 |
| 请求体 | 无 |
| 成功响应 | `Result` |
| 失败响应 | 抛出业务异常,常见原因包括未打开案件、同案件任务已在运行 |
典型调用示例:
```text
GET /govern/calcTask?taskProcess=66
```
注意事项:
- 必须在已打开案件的上下文中调用;
- 同一案件同时只能运行一条治理流水线;
- 治理任务由独立线程执行,SSE 进度需要显式绑定用户 ID。
**章节来源**
- [GovernController.java:24-72](file://ai-server/src/main/java/com/zsjz/ai/module/govern/controller/GovernController.java#L24-L72)
- [GovernService.java:1-200](file://ai-server/src/main/java/com/zsjz/ai/module/govern/serivce/GovernService.java#L1-L200)
### 治理树接口
#### 获取治理树结构
| 项目 | 说明 |
|---|---|
| HTTP 方法 | GET |
| URL | `/gt/tree` |
| 请求参数 | 无 |
| 响应字段 | `Result>`,包含层级节点 |
作用:
- 返回机构、银行、运营商等组织的层级树;
- 节点含 `id`、父节点 `pid`、类型、中文表名和数据量等信息;
- AI 动态表节点会使用负数 id,并额外下发字符串形式的模板 id,避免前端 JSON 数字精度丢失。
典型调用示例:
```text
GET /gt/tree
```
#### 治理树表格分页
| 项目 | 说明 |
|---|---|
| HTTP 方法 | POST |
| URL | `/gt/treeTablePage` |
| 请求体 | `GovernTreeQuery` |
| 响应字段 | `Result