当用户指定一个接口(Controller 方法名、API 路径、或 Service 方法名),自动追踪完整调用链路并生成 Mermaid 时序图。
用户可能提供以下任一信息:
/api/v1/dossier/selectDossierVolumeselectDossierVolumeEleDossierController#selectDossierVolume操作:
search_symbol 定位目标 Controller 方法,必要时结合 grep_code 搜索路径注解@RequestMapping、@PostMapping 等注解或对应 API 接口定义获取)ele-archives-api 模块),获取注解和路径信息从 Controller 方法开始,逐层深入追踪:
Controller → Service(接口) → ServiceImpl(实现) → DAO/Mapper → SQL
→ 外部调用(Feign/MQ/Redis)
对每一层执行:
search_symbol(带 relation: calls)查找被调用方法read_file 读取方法完整实现代码必须关注的调用类型:
@Autowired 注入的 Service、DAO、工具类AppMessageSender、publisher 包下的类)ApplicationEventPublisher)追踪终止条件:
MessageUtils、BeanUtils、PageHelper)仅标注不展开参与者命名:
| 层级 | 命名规则 | 示例 |
|---|---|---|
| ------ | ---------- | ------ |
| 客户端 | Client | Client |
| Controller | 类名简称 | Controller |
| Service | 业务名+Service | DossierService |
| Mapper/DAO | 业务名+Mapper | DossierMapper |
| 数据库 | DB | DB |
| 缓存 | Redis | Redis |
| 消息队列 | MQ | MQ |
| 外部服务 | 服务名 | MoiraiService |
箭头语义:
->> (实线)-->> (虚线)Note right of 标注"异步"分支与循环:
alt 条件A业务含义 / else 条件B业务含义 / endloop 循环业务含义opt 可选条件业务含义par 并行任务描述Note over 参与者: 判断说明 标注模板:
sequenceDiagram
participant Client
participant Controller
participant Service
participant Mapper
participant DB
Client->>Controller: POST /api/path (RequestDto)
Controller->>Controller: 参数预处理(业务含义说明)
Controller->>Service: methodName(params)
Note over Service: 关键变量 xxx 的业务含义说明
alt 条件成立(用业务语言描述)
Service->>Mapper: queryMethod(params)
Mapper->>DB: SQL操作描述
DB-->>Mapper: 结果集
Mapper-->>Service: List<Entity>
Note over Service: 对结果进行 xxx 业务处理
else 条件不成立(用业务语言描述)
Service-->>Controller: 返回错误/空结果
end
opt 存在某可选条件时
Service->>Mapper: updateMethod(params)
Mapper->>DB: UPDATE ...
end
Service-->>Controller: 处理结果
Controller-->>Client: BWJsonResult<Vo>
在时序图之后,以表格形式列出所有关键判断节点:
| 序号 | 位置(类#方法 行号) | 判断条件(代码) | 业务含义(自然语言) | True 分支处理 | False 分支处理 |
|---|---|---|---|---|---|
| ------ | ---------------------- | ------------------ | ---------------------- | --------------- | ---------------- |
| 1 | ServiceImpl#method L45 | if (status == null) | 校验归档状态是否存在 | 抛出异常:状态不能为空 | 继续后续处理 |
| 2 | ServiceImpl#method L78 | if ("6".equals(dataState)) | 判断是否为已归档状态 | 过滤未接收的记录 | 保持原始状态不变 |
要求:
按层级列出每个方法:
### 调用链路
1. **Controller 层**
- `EleDossierController#selectDossierVolume`
- 职责:接收请求,参数预处理,调用 Service
- 关键逻辑:将逗号分隔的分类ID拆分为列表
2. **Service 层**
- `EleDossierServiceImpl#selectDossierVolume`
- 职责:核心业务逻辑处理
- 关键逻辑:分页查询、权限过滤
- 事务:无 / @Transactional(propagation=REQUIRED)
3. **DAO 层**
- `EleDossierMapper#selectDossierVolume`
- 对应 SQL:SELECT ... FROM ... WHERE ...
根据实际代码情况,选择性输出以下内容:
@Transactional 覆盖范围及传播行为## 接口概述
| 属性 | 值 |
|------|-----|
| 接口路径 | POST /api/xxx |
| 所属模块 | xxx模块 |
| Controller | XxxController#methodName |
| 功能描述 | 一句话描述接口功能 |
## 时序图
(Mermaid sequenceDiagram 代码块)
## 关键判断节点
(表格)
## 调用链路详情
(分层列出)
## 补充分析
### 事务边界
(如有)
### 异常处理链路
(如有)
### 性能关注点
(如有)
### 外部依赖
(如有)
Note 标注异步边界,单独说明异步处理流程@EventListener 或 subscriber 处理逻辑共 1 个版本