@dtt_siye/atool 1.3.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/install-skills.sh +16 -0
- package/lib/knowledge-graph.sh +483 -81
- package/lib/pre-scan.sh +70 -5
- package/package.json +1 -1
- package/skills/project-analyze/SKILL.md +34 -15
- package/skills/project-analyze/phases/phase2-understand.md +7 -1
- package/skills/project-analyze/phases/phase2.5-refine.md +284 -0
- package/skills/project-analyze/phases/phase4-synthesize.md +100 -119
- package/skills/project-analyze/phases/phase5-export.md +78 -32
- package/skills/project-analyze/prompts/understand-agent.md +17 -0
- package/skills/project-analyze/rules/android.md +61 -260
- package/skills/project-analyze/rules/devops.md +61 -421
- package/skills/project-analyze/rules/generic.md +53 -221
- package/skills/project-analyze/rules/go.md +60 -275
- package/skills/project-analyze/rules/harmony.md +64 -237
- package/skills/project-analyze/rules/java.md +47 -485
- package/skills/project-analyze/rules/mobile-flutter.md +57 -292
- package/skills/project-analyze/rules/mobile-react-native.md +65 -262
- package/skills/project-analyze/rules/mobile-swift.md +58 -303
- package/skills/project-analyze/rules/python.md +50 -296
- package/skills/project-analyze/rules/rust-tauri.md +51 -217
- package/skills/project-analyze/rules/rust.md +50 -274
- package/skills/project-analyze/rules/web-nextjs.md +61 -335
- package/skills/project-analyze/rules/web-react.md +50 -272
- package/skills/project-analyze/rules/web-vue.md +58 -352
- package/skills/project-analyze/rules/web.md +55 -347
- package/skills/requirements-writer/SKILL.md +48 -1
- package/skills/software-architecture/SKILL.md +73 -3
|
@@ -1,507 +1,69 @@
|
|
|
1
|
-
# Java / Spring Boot
|
|
1
|
+
# Java / Spring Boot 分析规则
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **编码规范**:本规则不包含编码规范内容。Phase 2.5 精炼阶段会自动加载 `java-conventions` skill 作为规范约束。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## 模块发现策略
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
↓
|
|
12
|
-
Controller / REST(API 入口)
|
|
13
|
-
↓
|
|
14
|
-
Service / UseCase(业务逻辑)
|
|
15
|
-
↓
|
|
16
|
-
Repository / DAO(数据访问)
|
|
17
|
-
↓
|
|
18
|
-
Entity / Model(数据模型)
|
|
19
|
-
↓
|
|
20
|
-
Security(安全)
|
|
21
|
-
↓
|
|
22
|
-
Common / Utils(工具)
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## 目录扫描策略
|
|
26
|
-
|
|
27
|
-
### 1. 识别构建文件
|
|
7
|
+
- **Maven 多模块**:检查根 `pom.xml` 的 `<modules>` 标签,每个 `<module>` 为独立分析单元
|
|
8
|
+
- **Gradle 多模块**:检查 `settings.gradle` / `settings.gradle.kts` 的 `include` 声明
|
|
9
|
+
- **包路径推断**:从 `pom.xml` `<groupId>` 推断(跳过 `org.springframework.*` 等框架 groupId),备选读首个 `.java` 文件的 `package` 声明;禁止使用 `com.example` 等占位符
|
|
10
|
+
- **Java 版本推断**:从 `<java.version>` / `sourceCompatibility` 提取;禁止默认使用 JDK 17+
|
|
28
11
|
|
|
29
|
-
|
|
30
|
-
- `pom.xml` → Maven 项目
|
|
31
|
-
- `build.gradle` / `build.gradle.kts` → Gradle 项目
|
|
32
|
-
- `settings.gradle` / `settings.gradle.kts` → Gradle settings
|
|
12
|
+
模块间依赖拓扑:从所有模块 pom.xml/build.gradle 提取,检测循环依赖(标记 Critical)。
|
|
33
13
|
|
|
34
|
-
|
|
14
|
+
## 入口识别
|
|
35
15
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
16
|
+
| 标记 | 含义 |
|
|
17
|
+
|------|------|
|
|
18
|
+
| `@SpringBootApplication` | 应用主入口(`main()` 方法所在类) |
|
|
19
|
+
| `@RestController` / `@Controller` | HTTP API 入口 |
|
|
20
|
+
| `@FeignClient` | 外部服务调用入口 |
|
|
21
|
+
| `@KafkaListener` / `@RabbitListener` | 消息消费入口 |
|
|
22
|
+
| `@Scheduled` | 定时任务入口 |
|
|
23
|
+
| `bootstrap.yml` | Spring Cloud 配置中心入口 |
|
|
40
24
|
|
|
41
|
-
|
|
25
|
+
## 架构模式识别
|
|
42
26
|
|
|
43
|
-
|
|
44
|
-
- 每个模块为一个分析单元
|
|
45
|
-
- 模块间依赖关系
|
|
46
|
-
|
|
47
|
-
### 4. 依赖提取
|
|
48
|
-
|
|
49
|
-
| 类别 | 常见依赖 |
|
|
27
|
+
| 模式 | 检测特征 |
|
|
50
28
|
|------|----------|
|
|
51
|
-
|
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
| 缓存 | spring-boot-starter-data-redis, caffeine |
|
|
56
|
-
| 消息 | spring-kafka, spring-amqp |
|
|
57
|
-
| 微服务 | spring-cloud-starter-*, nacos, eureka |
|
|
58
|
-
| 文档 | springdoc-openapi, knife4j |
|
|
59
|
-
| 工具 | lombok, mapstruct, hutool |
|
|
60
|
-
|
|
61
|
-
### 5. 按层扫描路径
|
|
62
|
-
|
|
63
|
-
- **Controller**: `*/controller/`, `*/rest/`, `*/api/`
|
|
64
|
-
- **Service**: `*/service/`, `*/service/impl/`
|
|
65
|
-
- **Repository**: `*/repository/`, `*/dao/`, `*/mapper/`
|
|
66
|
-
- **Model**: `*/model/`, `*/entity/`, `*/domain/`, `*/dto/`, `*/vo/`
|
|
67
|
-
- **Config**: `*/config/`, `*/configuration/`
|
|
68
|
-
- **Security**: `*/security/`
|
|
69
|
-
- **Common**: `*/common/`, `*/utils/`, `*/enums/`
|
|
70
|
-
|
|
71
|
-
## 多模块项目发现策略
|
|
72
|
-
|
|
73
|
-
### Maven 多模块项目
|
|
74
|
-
|
|
75
|
-
**前置检测(Step 3 模块发现之前必须执行)**:
|
|
76
|
-
|
|
77
|
-
1. 检查根 `pom.xml` 中是否存在 `<modules>` 标签
|
|
78
|
-
2. 如果存在,提取所有 `<module>` 值作为独立分析单元
|
|
79
|
-
3. 对每个模块,执行以下提取:
|
|
80
|
-
|
|
81
|
-
```
|
|
82
|
-
{module}/
|
|
83
|
-
├── pom.xml → groupId, artifactId, parent, dependencies
|
|
84
|
-
├── src/main/java/{package}/ → 所有 Java 源码
|
|
85
|
-
│ ├── controller/ → API 入口
|
|
86
|
-
│ ├── service/ → 业务逻辑
|
|
87
|
-
│ ├── mapper/ or repository/ → 数据访问
|
|
88
|
-
│ ├── domain/ or entity/ or model/ → 数据模型
|
|
89
|
-
│ ├── config/ → 配置
|
|
90
|
-
│ └── ...
|
|
91
|
-
├── src/main/resources/ → application.yml, mapper XML
|
|
92
|
-
└── src/test/java/ → 测试
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
#### 包路径推断(关键 — 防止生成 `com/example/` 等占位符)
|
|
96
|
-
|
|
97
|
-
1. **优先从 pom.xml `<groupId>` 推断**:
|
|
98
|
-
- `<groupId>com.ftms.scrm</groupId>` → `com/ftms/scrm/`
|
|
99
|
-
- **跳过**框架 groupId(`org.springframework.*`, `org.apache.*`, `com.alibaba.*`)
|
|
100
|
-
2. **备选从首个 .java 文件的 `package` 声明推断**:
|
|
101
|
-
- `package com.ftms.scrm.auth;` → `com/ftms/scrm/auth/`
|
|
102
|
-
3. **禁止使用** `com/example/`、`com.demo`、`com.yourcompany` 等默认占位符
|
|
103
|
-
|
|
104
|
-
#### Java 版本推断(防止默认 JDK 17+)
|
|
105
|
-
|
|
106
|
-
1. 从 `<java.version>` 属性提取(如 `<java.version>1.8</java.version>` → `JDK 8`)
|
|
107
|
-
2. 从 maven-compiler-plugin `<source>` 提取
|
|
108
|
-
3. 从 build.gradle `sourceCompatibility` 提取
|
|
109
|
-
4. **禁止默认使用** `JDK 17+` 或 `JDK 11+` 等猜测值
|
|
110
|
-
|
|
111
|
-
#### 每个模块必须提取的信息
|
|
112
|
-
|
|
113
|
-
| 信息 | 来源 | 用途 |
|
|
114
|
-
|------|------|------|
|
|
115
|
-
| artifactId | pom.xml | 模块名称 |
|
|
116
|
-
| groupId | pom.xml | 包路径推断 |
|
|
117
|
-
| Java 版本 | pom.xml properties | 环境要求 |
|
|
118
|
-
| Spring Boot 版本 | pom.xml parent/dependency | 技术栈表格 |
|
|
119
|
-
| 模块依赖 | pom.xml dependencies | 依赖关系图 |
|
|
120
|
-
| 端口 | application.yml server.port | 架构图标注 |
|
|
121
|
-
| 数据库 URL | application.yml datasource | 微服务适应性评估 |
|
|
122
|
-
|
|
123
|
-
### Gradle 多模块项目
|
|
124
|
-
|
|
125
|
-
1. 检查 `settings.gradle` 或 `settings.gradle.kts` 中的 `include` 声明
|
|
126
|
-
2. 每个 include 项为一个独立模块
|
|
127
|
-
3. 源码路径:`{module}/src/main/java/` 和 `{module}/src/main/kotlin/`
|
|
128
|
-
|
|
129
|
-
### 模块依赖拓扑图
|
|
130
|
-
|
|
131
|
-
从所有模块的 pom.xml/build.gradle 提取模块间依赖,生成 ASCII 拓扑图:
|
|
132
|
-
- 分析时按拓扑顺序(被依赖的模块先分析)
|
|
133
|
-
- 检测循环依赖(存在则标记为 Critical 问题)
|
|
134
|
-
|
|
135
|
-
## 架构适应性评估
|
|
136
|
-
|
|
137
|
-
在模块分析完成后,生成架构合规报告。评估以下 4 个维度:
|
|
138
|
-
|
|
139
|
-
### 1. 分层合规性
|
|
29
|
+
| 标准 Spring 三层 | `controller/` + `service/` + `repository/mapper/` 目录并存 |
|
|
30
|
+
| 按功能分包(DDD) | 包路径含业务域名(如 `order/`, `payment/`),每个包内含完整分层 |
|
|
31
|
+
| 微服务 | 存在 `spring-cloud-*` / nacos / eureka 依赖 + 多个可独立部署模块 |
|
|
32
|
+
| CQRS | 存在 `command/` + `query/` 分离目录或 `CommandHandler` / `QueryHandler` 类 |
|
|
140
33
|
|
|
141
|
-
|
|
34
|
+
架构合规检测:扫描 Controller import 是否引用 Mapper/Repository(层间越级);检查 Entity 是否引用 Service(反向依赖)。
|
|
142
35
|
|
|
143
|
-
|
|
144
|
-
|----|----------|----------|
|
|
145
|
-
| Controller | Service, DTO, VO | Repository, Entity, Mapper |
|
|
146
|
-
| Service | Repository, Entity, DTO, 其他 Service | Controller |
|
|
147
|
-
| Repository | Entity | Service, Controller |
|
|
148
|
-
| Entity / Model | 无(纯数据类) | Service, Repository, Controller |
|
|
149
|
-
| DTO / VO | 无(纯数据类) | Service, Repository |
|
|
150
|
-
| Config | Service, Repository(通过 @Bean) | — |
|
|
36
|
+
## 数据流模式
|
|
151
37
|
|
|
152
|
-
|
|
153
|
-
-
|
|
154
|
-
-
|
|
155
|
-
-
|
|
38
|
+
- **HTTP 请求链**:Filter → Controller → Service → Repository → DB
|
|
39
|
+
- **异步消息链**:MQ Listener → Service → Repository → DB
|
|
40
|
+
- **定时任务链**:@Scheduled → Service → Repository → DB
|
|
41
|
+
- **Feign 调用链**:Controller → Service → FeignClient → 外部服务
|
|
156
42
|
|
|
157
|
-
|
|
158
|
-
- `@ControllerAdvice` + `@ExceptionHandler` — 全局异常处理
|
|
159
|
-
- `@Configuration` 类(`*Config.java`)— 通过 @Bean 注入
|
|
160
|
-
- Actuator/HealthCheck 端点
|
|
161
|
-
- Test 类(`src/test/` 下)
|
|
162
|
-
- `*Application.java` 启动类
|
|
43
|
+
## 分析关注点
|
|
163
44
|
|
|
164
|
-
|
|
45
|
+
- **Bean 注入图**:从 `@Autowired` / 构造注入扫描 Service/Repository 依赖关系,识别循环依赖
|
|
46
|
+
- **事务边界**:`@Transactional` 标注的方法,是否跨模块事务
|
|
47
|
+
- **多数据源**:多个 `DataSource` Bean / 多个 datasource URL,标记微服务共享数据库风险
|
|
48
|
+
- **安全配置**:`SecurityFilterChain` → 认证方式(JWT/Session/OAuth2)+ 公开路径白名单
|
|
49
|
+
- **配置提取**:`application.yml` 中的端口、数据库 URL、Redis 地址用于架构图标注
|
|
165
50
|
|
|
166
|
-
|
|
51
|
+
## 输出示例
|
|
167
52
|
|
|
168
|
-
|
|
169
|
-
|--------|----------|--------|
|
|
170
|
-
| 共享数据库 | 多个模块的 application.yml 指向同一数据库 URL | Critical |
|
|
171
|
-
| 跨服务直接数据访问 | 服务 A 的 Mapper 查询服务 B 的表 | Critical |
|
|
172
|
-
| 共享业务逻辑库 | common 模块包含 `*Service.java` | Warning |
|
|
173
|
-
| Feign 调用链过深 | 调用链 >3 层 | Warning |
|
|
174
|
-
| 服务无法独立部署 | 模块间存在非 API 的编译期依赖 | Critical |
|
|
175
|
-
| API 网关仅做路由 | Gateway 模块无聚合/限流/认证逻辑 | Info |
|
|
176
|
-
|
|
177
|
-
**检测方法**:
|
|
178
|
-
```
|
|
179
|
-
# 共享数据库:提取所有模块的 datasource URL
|
|
180
|
-
grep -r 'spring.datasource.url' */src/main/resources/
|
|
181
|
-
|
|
182
|
-
# 跨服务数据访问:检查 Mapper XML 是否引用其他服务的表
|
|
183
|
-
grep -r '<tableName>' */src/main/resources/mapper/
|
|
184
|
-
|
|
185
|
-
# Feign 调用链:扫描 @FeignClient 接口,构建调用图
|
|
186
|
-
grep -r '@FeignClient' --include='*.java' .
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
### 3. 包结构健康度
|
|
190
|
-
|
|
191
|
-
| 检测项 | 判定标准 | 严重度 |
|
|
192
|
-
|--------|----------|--------|
|
|
193
|
-
| 组织模式 | 按层分包 vs 按功能分包 vs 混合 | — |
|
|
194
|
-
| 大泥球 | 单个包内 >50 个 .java 文件 | Warning |
|
|
195
|
-
| 循环依赖 | 包 A import 包 B,包 B 也 import 包 A | Critical |
|
|
196
|
-
| 包层次过深 | 包路径 >6 层 | Info |
|
|
197
|
-
|
|
198
|
-
### 4. 依赖方向
|
|
199
|
-
|
|
200
|
-
从 pom.xml/build.gradle 提取模块间依赖,构建有向图:
|
|
201
|
-
- 上层依赖下层,不存在反向依赖
|
|
202
|
-
- 公共模块(common, utils, core)不依赖业务模块
|
|
203
|
-
- API 模块(仅含接口/DTO)不依赖实现模块
|
|
204
|
-
- 检测并标注循环依赖
|
|
205
|
-
|
|
206
|
-
### 输出格式
|
|
207
|
-
|
|
208
|
-
在每个模块的 MODULE-DOC.md 中增加「架构合规评估」章节:
|
|
209
|
-
|
|
210
|
-
```markdown
|
|
211
|
-
## 架构合规评估
|
|
212
|
-
|
|
213
|
-
### 分层合规
|
|
214
|
-
| 规则 | 状态 | 违规位置 | 严重度 |
|
|
215
|
-
|------|------|----------|--------|
|
|
216
|
-
| Controller 不直接调用 Repository | ⚠️ 违规 | UserController.java:45 imports UserMapper | Warning |
|
|
217
|
-
| Entity 不包含业务逻辑 | ✅ 合规 | — | — |
|
|
218
|
-
| Service 不依赖 Controller | ✅ 合规 | — | — |
|
|
219
|
-
|
|
220
|
-
### 包结构
|
|
221
|
-
- 组织模式:按层分包(建议迁移为按功能分包)
|
|
222
|
-
- 包层次深度:4 层
|
|
223
|
-
- 循环依赖:无
|
|
224
|
-
|
|
225
|
-
### 微服务适应性(适用时)
|
|
226
|
-
| 检测项 | 状态 | 详情 |
|
|
227
|
-
|--------|------|------|
|
|
228
|
-
| 独立数据库 | ❌ | 3 个服务共享同一 MySQL |
|
|
229
|
-
| 同步耦合 | ⚠️ | Feign 调用链最深 3 层 |
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
## 各层提取规则
|
|
233
|
-
|
|
234
|
-
### 层 1: Controller 层
|
|
235
|
-
|
|
236
|
-
**扫描文件**: `*Controller.java`, `*Resource.java`, `*Endpoint.java`
|
|
237
|
-
|
|
238
|
-
**提取内容**:
|
|
239
|
-
- 类名 + `@RequestMapping` 基础路径
|
|
240
|
-
- API 方法列表(HTTP 方法 + 路径 + 参数 + 返回类型 + Swagger 注解)
|
|
241
|
-
- 权限注解(`@PreAuthorize`, `@RequiresPermissions`)
|
|
242
|
-
- 请求/响应 DTO
|
|
243
|
-
|
|
244
|
-
**输出示例**:
|
|
53
|
+
Controller 提取片段:
|
|
245
54
|
```
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
- **API 方法**:
|
|
251
|
-
| 方法 | HTTP | 路径 | 参数 | 返回类型 | 权限 | 说明 |
|
|
252
|
-
|------|------|------|------|----------|------|------|
|
|
253
|
-
| list | GET | /list | UserQueryDTO | TableDataInfo<UserVO> | @PreAuthorize("@ss.hasPermi('system:user:list')") | 分页查询 |
|
|
254
|
-
| getInfo | GET | /{userId} | @PathVariable Long | R<UserVO> | @PreAuthorize("@ss.hasPermi('system:user:query')") | 获取详情 |
|
|
255
|
-
| add | POST | / | @Validated @RequestBody UserDTO | R<Void> | @PreAuthorize("@ss.hasPermi('system:user:add')") | 新增用户 |
|
|
256
|
-
| edit | PUT | / | @Validated @RequestBody UserDTO | R<Void> | @PreAuthorize("@ss.hasPermi('system:user:edit')") | 修改用户 |
|
|
257
|
-
| remove | DELETE | /{userIds} | @PathVariable Long[] | R<Void> | @PreAuthorize("@ss.hasPermi('system:user:remove')") | 删除用户 |
|
|
258
|
-
| export | POST | /export | UserQueryDTO | void (Excel) | @PreAuthorize("@ss.hasPermi('system:user:export')") | 导出 Excel |
|
|
259
|
-
- **Swagger**: @Tag(name = "用户管理")
|
|
55
|
+
UserController /system/user
|
|
56
|
+
GET /list → UserService.selectUserList() @PreAuthorize
|
|
57
|
+
POST / → UserService.insertUser() @PreAuthorize
|
|
58
|
+
PUT / → UserService.updateUser() @PreAuthorize
|
|
260
59
|
```
|
|
261
60
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
**扫描文件**: `*Service.java` (接口), `*ServiceImpl.java` (实现)
|
|
265
|
-
|
|
266
|
-
**提取内容**:
|
|
267
|
-
- 接口方法签名
|
|
268
|
-
- 实现类的业务逻辑摘要
|
|
269
|
-
- 依赖的其他 Service / Repository
|
|
270
|
-
- 事务注解(`@Transactional`)
|
|
271
|
-
|
|
272
|
-
**输出示例**:
|
|
61
|
+
架构合规评估片段:
|
|
273
62
|
```
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
| 方法 | 签名 | 说明 |
|
|
278
|
-
|------|------|------|
|
|
279
|
-
| selectUserList | (UserQueryDTO) → List<UserVO> | 分页查询用户列表 |
|
|
280
|
-
| selectUserById | (Long) → UserVO | 查询用户详情 |
|
|
281
|
-
| insertUser | (UserDTO) → int | 新增用户 |
|
|
282
|
-
| updateUser | (UserDTO) → int | 修改用户 |
|
|
283
|
-
| deleteUser | (Long[]) → int | 批量删除 |
|
|
284
|
-
| resetPwd | (Long, String) → int | 重置密码 |
|
|
63
|
+
分层合规
|
|
64
|
+
⚠️ UserController:45 imports UserMapper(Controller 越级调用 Mapper)
|
|
65
|
+
✅ Entity 无反向 Service 依赖
|
|
285
66
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
- **依赖注入**: UserMapper, RoleMapper, DeptService, PasswordEncoder
|
|
289
|
-
- **关键业务逻辑**:
|
|
290
|
-
- insertUser: 校验用户名唯一 → 加密密码 → 初始化角色 → 插入用户+角色关联
|
|
291
|
-
- updateUser: 校验权限 → 更新用户信息 → 同步角色关联
|
|
292
|
-
- **事务**: @Transactional (insertUser, updateUser, deleteUser)
|
|
67
|
+
微服务适应性
|
|
68
|
+
❌ 3 个服务共享同一 MySQL datasource URL
|
|
293
69
|
```
|
|
294
|
-
|
|
295
|
-
### 层 3: Repository / Mapper 层
|
|
296
|
-
|
|
297
|
-
**扫描文件**: `*Mapper.java`, `*Repository.java`, `*Dao.java`
|
|
298
|
-
|
|
299
|
-
#### MyBatis Mapper
|
|
300
|
-
|
|
301
|
-
**提取内容**:
|
|
302
|
-
- Mapper 接口方法签名
|
|
303
|
-
- XML 映射文件中的 SQL(自定义查询)
|
|
304
|
-
- ResultMap 映射关系
|
|
305
|
-
|
|
306
|
-
**输出示例**:
|
|
307
|
-
```
|
|
308
|
-
### UserMapper
|
|
309
|
-
- **路径**: `com.example.system.mapper.UserMapper`
|
|
310
|
-
- **继承**: BaseMapper<UserEntity>
|
|
311
|
-
- **自定义方法**:
|
|
312
|
-
| 方法 | 签名 | SQL 位置 | 说明 |
|
|
313
|
-
|------|------|----------|------|
|
|
314
|
-
| selectUserByUserName | (String) → UserEntity | UserMapper.xml | 按用户名查询 |
|
|
315
|
-
| checkUserNameUnique | (String) → int | UserMapper.xml | 检查用户名唯一 |
|
|
316
|
-
| selectUserByPhone | (String) → UserEntity | UserMapper.xml | 按手机号查询 |
|
|
317
|
-
- **XML 文件**: `resources/mapper/system/UserMapper.xml`
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
#### JPA Repository
|
|
321
|
-
|
|
322
|
-
**提取内容**:
|
|
323
|
-
- Repository 接口继承的基类
|
|
324
|
-
- 自定义查询方法(`findBy*`, `@Query`)
|
|
325
|
-
|
|
326
|
-
**输出示例**:
|
|
327
|
-
```
|
|
328
|
-
### UserRepository
|
|
329
|
-
- **路径**: `com.example.user.repository.UserRepository`
|
|
330
|
-
- **继承**: JpaRepository<User, Long>
|
|
331
|
-
- **自定义查询**:
|
|
332
|
-
| 方法 | 查询方式 | 说明 |
|
|
333
|
-
|------|----------|------|
|
|
334
|
-
| findByEmail(String email) | 方法名推导 | 按邮箱查询 |
|
|
335
|
-
| findByRole(String role) | 方法名推导 | 按角色查询 |
|
|
336
|
-
| findActiveUsers() | @Query("SELECT u FROM User u WHERE u.active = true") | 查询活跃用户 |
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
### 层 4: Entity / Model 层
|
|
340
|
-
|
|
341
|
-
**扫描文件**: `*/entity/*.java`, `*/domain/*.java`, `*/dto/*.java`, `*/vo/*.java`
|
|
342
|
-
|
|
343
|
-
**提取内容**:
|
|
344
|
-
- 实体类 + `@TableName` / `@Table` 注解
|
|
345
|
-
- 字段列表(名称 + 类型 + 数据库列名 + 注解)
|
|
346
|
-
- DTO/VO 与 Entity 的映射关系
|
|
347
|
-
- 枚举类型定义
|
|
348
|
-
|
|
349
|
-
**输出示例**:
|
|
350
|
-
```
|
|
351
|
-
### SysUser (Entity)
|
|
352
|
-
- **路径**: `com.example.system.domain.SysUser`
|
|
353
|
-
- **表名**: sys_user
|
|
354
|
-
- **字段**:
|
|
355
|
-
| 字段 | 类型 | 列名 | 注解 | 说明 |
|
|
356
|
-
|------|------|------|------|------|
|
|
357
|
-
| userId | Long | user_id | @TableId | 主键 |
|
|
358
|
-
| userName | String | user_name | @NotBlank | 用户名 |
|
|
359
|
-
| nickName | String | nick_name | - | 昵称 |
|
|
360
|
-
| email | String | email | @Email | 邮箱 |
|
|
361
|
-
| phonenumber | String | phonenumber | - | 手机号 |
|
|
362
|
-
| status | String | status | - | 状态(0正常 1停用) |
|
|
363
|
-
| createTime | Date | create_time | - | 创建时间 |
|
|
364
|
-
|
|
365
|
-
### UserVO (View Object)
|
|
366
|
-
- **路径**: `com.example.system.vo.UserVO`
|
|
367
|
-
- **来源**: SysUser + 关联查询(deptName, roleNames)
|
|
368
|
-
- **字段**: userId, userName, nickName, deptName, roleNames, status, createTime
|
|
369
|
-
```
|
|
370
|
-
|
|
371
|
-
### 层 5: Security 层
|
|
372
|
-
|
|
373
|
-
**扫描文件**: `*/security/**/*.java`, `*/config/SecurityConfig.java`
|
|
374
|
-
|
|
375
|
-
**提取内容**:
|
|
376
|
-
- Security Filter Chain 配置
|
|
377
|
-
- 认证方式(JWT / Session / OAuth2)
|
|
378
|
-
- 权限模型(RBAC / ABAC)
|
|
379
|
-
- 密码编码方式
|
|
380
|
-
- CORS 配置
|
|
381
|
-
|
|
382
|
-
**输出示例**:
|
|
383
|
-
```
|
|
384
|
-
### Security 配置
|
|
385
|
-
- **文件**: `com.example.config.SecurityConfig`
|
|
386
|
-
- **认证方式**: JWT (Bearer Token)
|
|
387
|
-
- **Filter Chain**:
|
|
388
|
-
1. JwtAuthenticationTokenFilter — 从 header 解析 token,验证签名
|
|
389
|
-
2. LogoutSuccessHandler — 清除 token
|
|
390
|
-
3. AuthenticationEntryPoint — 401 未认证响应
|
|
391
|
-
4. AccessDeniedHandler — 403 无权限响应
|
|
392
|
-
- **公开路径**: /login, /register, /captchaImage, /doc.html
|
|
393
|
-
- **密码编码**: BCryptPasswordEncoder
|
|
394
|
-
- **Token 存储**: Redis (key: login_tokens:{uuid})
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
### 层 6: 配置层
|
|
398
|
-
|
|
399
|
-
**扫描文件**: `application.yml`, `application-*.yml`, `bootstrap.yml`
|
|
400
|
-
|
|
401
|
-
**提取内容**:
|
|
402
|
-
- 服务端口和上下文路径
|
|
403
|
-
- 数据库连接配置
|
|
404
|
-
- Redis 配置
|
|
405
|
-
- 中间件配置
|
|
406
|
-
- Profile 环境区分
|
|
407
|
-
|
|
408
|
-
**输出示例**:
|
|
409
|
-
```
|
|
410
|
-
### application.yml 核心配置
|
|
411
|
-
| 配置项 | 值 | 说明 |
|
|
412
|
-
|--------|------|------|
|
|
413
|
-
| server.port | 8080 | 服务端口 |
|
|
414
|
-
| spring.datasource.url | jdbc:mysql://... | 数据库连接 |
|
|
415
|
-
| spring.redis.host | localhost | Redis 地址 |
|
|
416
|
-
| mybatis-plus.mapper-locations | classpath*:mapper/**/*Mapper.xml | Mapper XML |
|
|
417
|
-
| knife4j.enable | true | API 文档 |
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
## 输出模板
|
|
421
|
-
|
|
422
|
-
### README.md 章节结构
|
|
423
|
-
|
|
424
|
-
```markdown
|
|
425
|
-
# {项目名}
|
|
426
|
-
|
|
427
|
-
## 项目概述
|
|
428
|
-
系统功能描述
|
|
429
|
-
|
|
430
|
-
## 技术栈
|
|
431
|
-
| 技术 | 版本 | 用途 |
|
|
432
|
-
|------|------|------|
|
|
433
|
-
|
|
434
|
-
## 架构设计
|
|
435
|
-
### 架构图(ASCII)
|
|
436
|
-
### 数据流图
|
|
437
|
-
请求 → Filter → Controller → Service → Repository → Database → 返回
|
|
438
|
-
|
|
439
|
-
## 模块结构
|
|
440
|
-
Maven/Gradle 模块依赖关系图
|
|
441
|
-
|
|
442
|
-
## API 接口文档
|
|
443
|
-
按模块分组的 API 端点表
|
|
444
|
-
|
|
445
|
-
## 安全设计
|
|
446
|
-
认证流程 + 权限模型
|
|
447
|
-
|
|
448
|
-
## 数据模型
|
|
449
|
-
Entity 关系图(ER 图 ASCII)
|
|
450
|
-
|
|
451
|
-
## 配置说明
|
|
452
|
-
关键配置项 + 环境变量
|
|
453
|
-
|
|
454
|
-
## 构建 & 部署
|
|
455
|
-
Maven/Gradle 命令 + Docker 配置
|
|
456
|
-
```
|
|
457
|
-
|
|
458
|
-
### COMPONENT.md 章节结构
|
|
459
|
-
|
|
460
|
-
```markdown
|
|
461
|
-
# 模块文档
|
|
462
|
-
|
|
463
|
-
## Controller 层
|
|
464
|
-
按模块分组的 API 端点表
|
|
465
|
-
|
|
466
|
-
## Service 层
|
|
467
|
-
接口定义 + 业务逻辑说明
|
|
468
|
-
|
|
469
|
-
## Repository / Mapper 层
|
|
470
|
-
数据访问方法 + SQL 映射
|
|
471
|
-
|
|
472
|
-
## 数据模型
|
|
473
|
-
Entity + DTO + VO 定义 + 关系图
|
|
474
|
-
|
|
475
|
-
## 枚举类型
|
|
476
|
-
业务枚举定义
|
|
477
|
-
|
|
478
|
-
## 跨模块依赖
|
|
479
|
-
模块间调用关系图
|
|
480
|
-
```
|
|
481
|
-
|
|
482
|
-
## 模块边界识别
|
|
483
|
-
|
|
484
|
-
以下目录模式下的每个子目录视为独立模块(L2+ 分析时生成 MODULE-DOC.md):
|
|
485
|
-
|
|
486
|
-
| 层 | 扫描路径 | 模块判定规则 | MODULE-DOC slug 来源 |
|
|
487
|
-
|----|----------|-------------|---------------------|
|
|
488
|
-
| Maven 模块层 | Maven `<modules>` | 每个模块 | artifactId kebab-case |
|
|
489
|
-
| Controller 层 | `src/main/java/**/controller/` | 每个子目录 | 目录名 kebab-case |
|
|
490
|
-
| Service 层 | `src/main/java/**/service/` | 每个子目录 | 目录名 kebab-case |
|
|
491
|
-
| Config 层 | `src/main/java/**/config/` | 每个子目录 | 目录名 kebab-case |
|
|
492
|
-
| Entity 层 | `src/main/java/**/entity/` | 每个文件 | 类名 kebab-case |
|
|
493
|
-
|
|
494
|
-
**不视为独立模块的情况**:
|
|
495
|
-
- 单文件入口(如 `Application.java`)
|
|
496
|
-
- 纯导出桶文件(仅有 re-export)
|
|
497
|
-
- 工具函数目录(`util/`, `helper/`)— 合并为一个模块
|
|
498
|
-
- DTO/VO 目录(`dto/`, `vo/`)— 合并为一个模块
|
|
499
|
-
|
|
500
|
-
## Token 管理
|
|
501
|
-
|
|
502
|
-
- 大模块(>20 文件)拆分为子任务
|
|
503
|
-
- 每个子任务分析 ≤10 文件
|
|
504
|
-
- `pom.xml` / `build.gradle` 依赖分析单独一个子任务
|
|
505
|
-
- MyBatis XML 映射文件与对应 Mapper 接口一起分析
|
|
506
|
-
- 测试文件(`src/test/`)单独分析
|
|
507
|
-
- 配置文件(`application*.yml`)单独分析
|