@specpow/framework 0.5.22 → 0.5.24
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/builtin/schemas/mes-prd-to-code/references.md +150 -0
- package/builtin/schemas/mes-prd-to-code/rules.md +204 -0
- package/builtin/schemas/mes-prd-to-code/schema.yaml +462 -0
- package/builtin/schemas/mes-prd-to-code/templates/code-generation.md +81 -0
- package/builtin/schemas/mes-prd-to-code/templates/confirm-scope.md +67 -0
- package/builtin/schemas/mes-prd-to-code/templates/parse.md +168 -0
- package/builtin/schemas/mes-prd-to-code/templates/tasks.md +177 -0
- package/builtin/schemas/mes-prd-to-code/templates/tech-design.md +355 -0
- package/builtin/schemas/mes-prd-to-code/templates/test-gen.md +77 -0
- package/builtin/schemas/prd-to-tech-doc/schema.yaml +161 -0
- package/builtin/schemas/prd-to-tech-doc/templates/analysis.md +133 -0
- package/builtin/schemas/prd-to-tech-doc/templates/tech-design.md +263 -0
- package/builtin/schemas/prd-to-tech-doc/templates/tech-tasks.md +134 -0
- package/package.json +1 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# 测试生成报告: {{changeName}}
|
|
2
|
+
|
|
3
|
+
> 输入: 任务清单 (tasks.md) 中的 ServiceImpl 代码
|
|
4
|
+
> 生成日期: {{date}}
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. 测试文件清单
|
|
9
|
+
|
|
10
|
+
| # | 测试文件 | 被测类 | Mock 依赖 | 测试方法数 |
|
|
11
|
+
|:-:|----------|--------|-----------|:----------:|
|
|
12
|
+
| 1 | `src/test/java/{package}/XxxServiceImplMockTest.java` | XxxServiceImpl | Mapper, DetailService | N |
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 2. 测试详情
|
|
17
|
+
|
|
18
|
+
### 2.1 XxxServiceImplMockTest
|
|
19
|
+
|
|
20
|
+
**被测类**: `com.twsz.mom.xxx.service.impl.XxxServiceImpl`
|
|
21
|
+
|
|
22
|
+
**Mock 依赖**:
|
|
23
|
+
| # | 字段 | 类型 | 说明 |
|
|
24
|
+
|:-:|------|------|------|
|
|
25
|
+
| 1 | xxxMapper | XxxMapper | 主表 Mapper |
|
|
26
|
+
| 2 | detailService | XxxDetailService | 子表 Service |
|
|
27
|
+
|
|
28
|
+
**测试用例**:
|
|
29
|
+
|
|
30
|
+
| # | @Nested 分组 | 方法名 | 场景 | 断言 |
|
|
31
|
+
|:-:|-------------|--------|------|------|
|
|
32
|
+
| 1 | saveModel方法测试 | should_insert_when_idIsNull | 新增成功 | verify(mapper).insert(any) |
|
|
33
|
+
| 2 | saveModel方法测试 | should_update_when_idNotNull | 编辑成功 | verify(mapper).updateById(any) |
|
|
34
|
+
| 3 | saveModel方法测试 | should_throw_when_optimisticLockFails | 乐观锁冲突 | assertThrows(BaseException) |
|
|
35
|
+
| 4 | deleteByIds方法测试 | should_deleteByIds_when_givenIds | 批量删除 | verify(mapper).deleteBatchIds(any) |
|
|
36
|
+
| 5 | search方法测试 | should_returnPage_when_search | 分页查询 | assertNotNull(result) |
|
|
37
|
+
| 6 | list方法测试 | should_returnList_when_list | 列表查询 | assertNotNull(result) |
|
|
38
|
+
|
|
39
|
+
**测试代码结构**:
|
|
40
|
+
|
|
41
|
+
```java
|
|
42
|
+
@ExtendWith(MockitoExtension.class)
|
|
43
|
+
class XxxServiceImplMockTest {
|
|
44
|
+
|
|
45
|
+
@Mock
|
|
46
|
+
private XxxMapper xxxMapper;
|
|
47
|
+
|
|
48
|
+
@Mock
|
|
49
|
+
private XxxDetailService detailService;
|
|
50
|
+
|
|
51
|
+
@InjectMocks
|
|
52
|
+
private XxxServiceImpl xxxService;
|
|
53
|
+
|
|
54
|
+
@BeforeEach
|
|
55
|
+
void setUp() {
|
|
56
|
+
ReflectionTestUtils.setField(xxxService, "baseMapper", xxxMapper);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@Nested
|
|
60
|
+
@DisplayName("saveModel方法测试")
|
|
61
|
+
class SaveModelTests {
|
|
62
|
+
@Test
|
|
63
|
+
@DisplayName("新增成功")
|
|
64
|
+
void should_insert_when_idIsNull() { ... }
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 3. 统计
|
|
72
|
+
|
|
73
|
+
| 维度 | 数量 |
|
|
74
|
+
|------|:----:|
|
|
75
|
+
| 测试文件数 | N |
|
|
76
|
+
| 测试方法总数 | N |
|
|
77
|
+
| Mock 依赖总数 | N |
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# PRD to Tech Doc Schema
|
|
2
|
+
# 将需求文档(PRD)转换为技术文档
|
|
3
|
+
# 工件流: analysis → tech-design → tech-tasks
|
|
4
|
+
|
|
5
|
+
name: prd-to-tech-doc
|
|
6
|
+
description: |
|
|
7
|
+
需求文档转技术文档工作流。
|
|
8
|
+
输入一份业务需求文档(PRD),输出结构化的技术设计文档和实施任务清单。
|
|
9
|
+
适用于:已有功能需求文档,需要转化为开发团队可执行的技术方案。
|
|
10
|
+
|
|
11
|
+
与 mes-crud-module 的区别:
|
|
12
|
+
- mes-crud-module:从零生成 CRUD 模块代码(模板化)
|
|
13
|
+
- prd-to-tech-doc:从需求文档出发,分析现有代码,产出技术方案(定制化)
|
|
14
|
+
|
|
15
|
+
apply:
|
|
16
|
+
requires:
|
|
17
|
+
- tech-tasks # 实施前必须完成所有工件
|
|
18
|
+
|
|
19
|
+
artifacts:
|
|
20
|
+
- id: analysis
|
|
21
|
+
name: 需求分析
|
|
22
|
+
description: 解析 PRD,识别功能点、影响范围和技术约束
|
|
23
|
+
requires: []
|
|
24
|
+
template: analysis.md
|
|
25
|
+
instruction: |
|
|
26
|
+
读取用户提供的需求文档(PRD),完成以下分析:
|
|
27
|
+
|
|
28
|
+
1. 功能点提取
|
|
29
|
+
- 从 PRD 中提取所有功能点,编号列出
|
|
30
|
+
- 区分:CRUD 操作 / 业务规则 / 导入导出 / 状态流转 等类型
|
|
31
|
+
- 标注每个功能点的优先级(P0=必须 / P1=重要 / P2=可选)
|
|
32
|
+
|
|
33
|
+
2. 数据模型分析
|
|
34
|
+
- 根据 PRD 中的字段说明,推断数据库表结构
|
|
35
|
+
- 识别:实体名、表名、字段列表、字段类型、约束
|
|
36
|
+
- 识别外键关系(如有关联表)
|
|
37
|
+
- 标注审计字段(created_by, created_date, last_updated_by, last_updated_date)
|
|
38
|
+
|
|
39
|
+
3. 现有代码扫描
|
|
40
|
+
- 搜索项目中是否已有相关代码(实体、表、接口、页面)
|
|
41
|
+
- 如果已有:标注哪些可以直接复用,哪些需要修改
|
|
42
|
+
- 如果没有:标注需要新建
|
|
43
|
+
- 使用 codegraph_explore 查找相关符号
|
|
44
|
+
|
|
45
|
+
4. 技术约束识别
|
|
46
|
+
- 项目技术栈约束(Spring Boot 2.7 / MyBatis-Plus / Oracle / Vue2 / ViewUI)
|
|
47
|
+
- 编码规范约束(BaseModel 继承、ResponseWrapper 响应、LambdaQueryWrapper 等)
|
|
48
|
+
- 与现有模块的集成点(如本功能被哪些模块消费)
|
|
49
|
+
|
|
50
|
+
5. 影响范围
|
|
51
|
+
- 受影响的后端模块(modules-center 下的哪个 center)
|
|
52
|
+
- 受影响的前端目录(views/ 和 api/ 下的路径)
|
|
53
|
+
- 受影响的数据库 schema
|
|
54
|
+
|
|
55
|
+
输出格式:结构化的分析报告,包含以上 5 个部分。
|
|
56
|
+
output: analysis.md
|
|
57
|
+
|
|
58
|
+
- id: tech-design
|
|
59
|
+
name: 技术设计
|
|
60
|
+
description: 数据库设计 + API 设计 + 代码结构设计 + 业务逻辑流程
|
|
61
|
+
requires: [analysis]
|
|
62
|
+
template: tech-design.md
|
|
63
|
+
instruction: |
|
|
64
|
+
基于需求分析报告,生成完整的技术设计文档。
|
|
65
|
+
|
|
66
|
+
1. 数据库设计
|
|
67
|
+
- 表结构 DDL(Oracle 语法)
|
|
68
|
+
- 字段类型映射规则:
|
|
69
|
+
- 文本 → VARCHAR2(n)
|
|
70
|
+
- 数字(整数)→ NUMBER(19) 或 NUMBER(10)
|
|
71
|
+
- 数字(小数)→ NUMBER(19,4)
|
|
72
|
+
- 日期 → DATE 或 TIMESTAMP
|
|
73
|
+
- 开关 → NUMBER(1) DEFAULT 1
|
|
74
|
+
- 主键: id NUMBER(19) 雪花算法(ASSIGN_ID)
|
|
75
|
+
- 审计字段: created_by, created_date, last_updated_by, last_updated_date
|
|
76
|
+
- 索引建议
|
|
77
|
+
- 如使用 dbx MCP 工具,优先通过 dbx 建表
|
|
78
|
+
|
|
79
|
+
2. API 接口设计
|
|
80
|
+
- 接口清单表(Method / Path / 描述 / 请求体 / 响应体)
|
|
81
|
+
- MES 项目标准接口模式:
|
|
82
|
+
- POST /{entity}/search — 分页查询(PageForm<Entity>)
|
|
83
|
+
- POST /{entity}/add — 新增(或 POST /{entity}/save 统一保存)
|
|
84
|
+
- PUT /{entity}/update — 修改
|
|
85
|
+
- DELETE /{entity}/delete — 批量删除
|
|
86
|
+
- POST /{entity}/export — Excel 导出
|
|
87
|
+
- POST /{entity}/uploadExcel — Excel 导入(如有)
|
|
88
|
+
- 响应统一使用 ResponseWrapper<T>
|
|
89
|
+
- 每个接口给出请求示例和响应示例(JSON)
|
|
90
|
+
|
|
91
|
+
3. 后端代码结构
|
|
92
|
+
- Entity 类设计(继承 BaseModel,字段注解)
|
|
93
|
+
- Mapper 接口 + XML 设计(resultMap/resultType、查询条件)
|
|
94
|
+
- Service 接口设计(方法签名、返回值)
|
|
95
|
+
- ServiceImpl 关键逻辑(校验、唯一性、事务)
|
|
96
|
+
- Controller 设计(路径、方法、参数校验)
|
|
97
|
+
- 给出每个类的关键代码模板
|
|
98
|
+
|
|
99
|
+
4. 前端代码结构
|
|
100
|
+
- API 文件(src/api/{domain}/{entity}.js)
|
|
101
|
+
- 列表页(index.vue — search-table + indexPage mixin)
|
|
102
|
+
- 表单页({entity}-form.vue — master-sub + Form)
|
|
103
|
+
- 给出关键配置(表格列定义、表单字段、校验规则)
|
|
104
|
+
|
|
105
|
+
5. 业务逻辑流程
|
|
106
|
+
- 用流程图(ASCII)描述核心业务流程
|
|
107
|
+
- 标注校验点和异常处理
|
|
108
|
+
- 如有状态流转,画出状态机
|
|
109
|
+
|
|
110
|
+
6. 集成点
|
|
111
|
+
- 本模块被哪些其他模块调用
|
|
112
|
+
- 需要暴露哪些 Feign 接口
|
|
113
|
+
- 需要注册哪些菜单权限
|
|
114
|
+
|
|
115
|
+
注意:
|
|
116
|
+
- 代码模板必须匹配 MES 项目的真实编码规范
|
|
117
|
+
- 实体继承 BaseModel,使用 @Data + @TableName
|
|
118
|
+
- Mapper XML 位于 resources/mapper/{module}/ 目录
|
|
119
|
+
- 前端组件使用 View Design 4 组件库
|
|
120
|
+
output: tech-design.md
|
|
121
|
+
|
|
122
|
+
- id: tech-tasks
|
|
123
|
+
name: 实施任务
|
|
124
|
+
description: 可执行的技术实施任务清单(SDD 引擎可逐个执行)
|
|
125
|
+
requires: [analysis, tech-design]
|
|
126
|
+
template: tech-tasks.md
|
|
127
|
+
instruction: |
|
|
128
|
+
基于技术设计文档,拆分为可执行的实施任务列表。
|
|
129
|
+
|
|
130
|
+
任务拆分原则:
|
|
131
|
+
1. 每个任务足够小(2-5 分钟完成)
|
|
132
|
+
2. 包含精确的文件路径
|
|
133
|
+
3. 包含完整的代码或明确的修改指令
|
|
134
|
+
4. 包含验证步骤
|
|
135
|
+
5. 任务之间尽量独立(便于 SDD 并行)
|
|
136
|
+
|
|
137
|
+
任务顺序约定:
|
|
138
|
+
1. 数据库建表(DDL)
|
|
139
|
+
2. 后端 Entity
|
|
140
|
+
3. 后端 Mapper + XML
|
|
141
|
+
4. 后端 Service 接口
|
|
142
|
+
5. 后端 ServiceImpl
|
|
143
|
+
6. 后端 Controller
|
|
144
|
+
7. 前端 API 文件
|
|
145
|
+
8. 前端列表页
|
|
146
|
+
9. 前端表单页
|
|
147
|
+
10. 菜单注册 SQL
|
|
148
|
+
|
|
149
|
+
每个任务格式:
|
|
150
|
+
- [ ] Task N: <标题>
|
|
151
|
+
文件: <精确路径>
|
|
152
|
+
描述: <具体实现指令,包含代码模板>
|
|
153
|
+
验证: <如何验证>
|
|
154
|
+
依赖: Task-X(如有)
|
|
155
|
+
|
|
156
|
+
注意:
|
|
157
|
+
- 如果需求文档中有导入功能,增加 uploadExcel 相关任务
|
|
158
|
+
- 如果需求文档中有导出功能,增加 export 相关任务
|
|
159
|
+
- 如果有状态流转,增加状态操作接口任务
|
|
160
|
+
- 使用 dbx MCP 建表时,在建表任务中标注
|
|
161
|
+
output: tech-tasks.md
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# 需求分析: <功能名称>
|
|
2
|
+
|
|
3
|
+
> 输入: <PRD 文档路径>
|
|
4
|
+
> 分析日期: <日期>
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. 功能点提取
|
|
9
|
+
|
|
10
|
+
| 编号 | 功能点 | 类型 | 优先级 | PRD 章节 | 说明 |
|
|
11
|
+
|:----:|--------|------|:------:|----------|------|
|
|
12
|
+
| F-01 | | CRUD / 业务规则 / 导入导出 / 状态流转 | P0/P1/P2 | | |
|
|
13
|
+
| F-02 | | | | | |
|
|
14
|
+
|
|
15
|
+
### 功能点说明
|
|
16
|
+
|
|
17
|
+
#### F-01: <功能名称>
|
|
18
|
+
|
|
19
|
+
- **描述**: <做什么>
|
|
20
|
+
- **触发条件**: <何时触发>
|
|
21
|
+
- **处理逻辑**: <如何处理>
|
|
22
|
+
- **输出结果**: <产生什么>
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 2. 数据模型分析
|
|
27
|
+
|
|
28
|
+
### 2.1 实体识别
|
|
29
|
+
|
|
30
|
+
| 实体名 | 表名 | 类型 | 说明 |
|
|
31
|
+
|--------|------|------|------|
|
|
32
|
+
| | | 主表 / 子表 / 字典 / 关联表 | |
|
|
33
|
+
|
|
34
|
+
### 2.2 字段清单
|
|
35
|
+
|
|
36
|
+
#### 实体: <EntityName>
|
|
37
|
+
|
|
38
|
+
| 字段名 | 中文名 | 类型 | 必填 | 默认值 | 约束 | 说明 |
|
|
39
|
+
|--------|--------|------|:----:|--------|------|------|
|
|
40
|
+
| id | 主键 | Long | ✅ | 雪花算法 | PK | |
|
|
41
|
+
| | | | | | | |
|
|
42
|
+
|
|
43
|
+
**审计字段**(自动填充):
|
|
44
|
+
- created_by, created_date, last_updated_by, last_updated_date
|
|
45
|
+
|
|
46
|
+
### 2.3 表关系
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
<表关系图(ASCII)>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 3. 现有代码扫描
|
|
55
|
+
|
|
56
|
+
### 3.1 已有代码
|
|
57
|
+
|
|
58
|
+
| 组件 | 路径 | 状态 | 说明 |
|
|
59
|
+
|------|------|:----:|------|
|
|
60
|
+
| Entity | | 已有 / 需新建 / 需修改 | |
|
|
61
|
+
| Mapper | | | |
|
|
62
|
+
| Service | | | |
|
|
63
|
+
| Controller | | | |
|
|
64
|
+
| 前端 API | | | |
|
|
65
|
+
| 前端页面 | | | |
|
|
66
|
+
|
|
67
|
+
### 3.2 可复用部分
|
|
68
|
+
|
|
69
|
+
- <列出可以直接复用的代码>
|
|
70
|
+
|
|
71
|
+
### 3.3 需要新建/修改的部分
|
|
72
|
+
|
|
73
|
+
- <列出需要新增或修改的代码>
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 4. 技术约束
|
|
78
|
+
|
|
79
|
+
| 维度 | 约束 | 来源 |
|
|
80
|
+
|------|------|------|
|
|
81
|
+
| 技术栈 | Spring Boot 2.7 / MyBatis-Plus / Oracle / Vue2 / ViewUI | 项目规范 |
|
|
82
|
+
| 实体基类 | 继承 BaseModel | CLAUDE.md |
|
|
83
|
+
| 响应格式 | ResponseWrapper<T> | CLAUDE.md |
|
|
84
|
+
| 查询方式 | LambdaQueryWrapper | CLAUDE.md |
|
|
85
|
+
| 编号生成 | @AutoGenCode(如为单据) | 项目规范 |
|
|
86
|
+
| 前端组件 | search-table + indexPage / master-sub | 项目规范 |
|
|
87
|
+
| 数据库操作 | dbx MCP(优先) / SQL 脚本 | 项目规范 |
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 5. 影响范围
|
|
92
|
+
|
|
93
|
+
### 5.1 后端影响
|
|
94
|
+
|
|
95
|
+
| 模块 | 路径 | 影响说明 |
|
|
96
|
+
|------|------|----------|
|
|
97
|
+
| | modules-center/{module}-center/ | |
|
|
98
|
+
|
|
99
|
+
### 5.2 前端影响
|
|
100
|
+
|
|
101
|
+
| 目录 | 路径 | 影响说明 |
|
|
102
|
+
|------|------|----------|
|
|
103
|
+
| API | src/api/{domain}/ | |
|
|
104
|
+
| 页面 | src/views/{domain}/ | |
|
|
105
|
+
|
|
106
|
+
### 5.3 数据库影响
|
|
107
|
+
|
|
108
|
+
| Schema | 操作 | 说明 |
|
|
109
|
+
|--------|------|------|
|
|
110
|
+
| | 新建表 / 修改表 | |
|
|
111
|
+
|
|
112
|
+
### 5.4 集成点
|
|
113
|
+
|
|
114
|
+
| 集成方 | 方式 | 说明 |
|
|
115
|
+
|--------|------|------|
|
|
116
|
+
| | Feign / 直接调用 / 消息 | |
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 6. 风险与疑问
|
|
121
|
+
|
|
122
|
+
| 编号 | 类型 | 描述 | 建议 |
|
|
123
|
+
|:----:|------|------|------|
|
|
124
|
+
| R-01 | 风险 / 疑问 | | |
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## 7. 结论
|
|
129
|
+
|
|
130
|
+
- **新建实体数**:
|
|
131
|
+
- **新建接口数**:
|
|
132
|
+
- **新建页面数**:
|
|
133
|
+
- **预估任务数**:
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
# 技术设计: <功能名称>
|
|
2
|
+
|
|
3
|
+
> 输入: 需求分析报告 (analysis.md)
|
|
4
|
+
> 设计日期: <日期>
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. 数据库设计
|
|
9
|
+
|
|
10
|
+
### 1.1 表结构
|
|
11
|
+
|
|
12
|
+
#### 表: <table_name>
|
|
13
|
+
|
|
14
|
+
```sql
|
|
15
|
+
CREATE TABLE <table_name> (
|
|
16
|
+
id NUMBER(19) NOT NULL,
|
|
17
|
+
-- 业务字段
|
|
18
|
+
<column> <type> <constraint>,
|
|
19
|
+
-- 审计字段
|
|
20
|
+
created_by VARCHAR2(64),
|
|
21
|
+
created_date DATE DEFAULT SYSDATE,
|
|
22
|
+
last_updated_by VARCHAR2(64),
|
|
23
|
+
last_updated_date DATE DEFAULT SYSDATE,
|
|
24
|
+
CONSTRAINT pk_<table_name> PRIMARY KEY (id)
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
COMMENT ON TABLE <table_name> IS '<表中文名>';
|
|
28
|
+
COMMENT ON COLUMN <table_name>.id IS '主键';
|
|
29
|
+
-- 其他字段注释
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**索引**:
|
|
33
|
+
|
|
34
|
+
| 索引名 | 字段 | 类型 | 说明 |
|
|
35
|
+
|--------|------|------|------|
|
|
36
|
+
| | | UNIQUE / NORMAL | |
|
|
37
|
+
|
|
38
|
+
**数据库操作方式**:
|
|
39
|
+
- [ ] 优先使用 dbx MCP 工具建表
|
|
40
|
+
- [ ] 备选: 执行 SQL 脚本
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 2. API 接口设计
|
|
45
|
+
|
|
46
|
+
### 2.1 接口清单
|
|
47
|
+
|
|
48
|
+
| # | Method | Path | 描述 | 请求体 | 响应体 |
|
|
49
|
+
|:-:|--------|------|------|--------|--------|
|
|
50
|
+
| 1 | POST | `/{entity}/search` | 分页查询 | PageForm<Entity> | Page<Entity> |
|
|
51
|
+
| 2 | POST | `/{entity}/add` | 新增 | Entity | — |
|
|
52
|
+
| 3 | PUT | `/{entity}/update` | 修改 | Entity | — |
|
|
53
|
+
| 4 | DELETE | `/{entity}/delete` | 批量删除 | Long[] ids | — |
|
|
54
|
+
| 5 | POST | `/{entity}/export` | 导出 Excel | Entity | file |
|
|
55
|
+
| 6 | POST | `/{entity}/uploadExcel` | 导入 Excel | file | — |
|
|
56
|
+
|
|
57
|
+
### 2.2 接口详情
|
|
58
|
+
|
|
59
|
+
#### API-1: 分页查询
|
|
60
|
+
|
|
61
|
+
- **路径**: `POST /{entity}/search`
|
|
62
|
+
- **描述**: 分页查询<实体>列表
|
|
63
|
+
- **请求体**:
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"size": 20,
|
|
67
|
+
"current": 1,
|
|
68
|
+
"condition": {
|
|
69
|
+
"<field1>": "<value>"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
- **响应体**:
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"code": 200,
|
|
77
|
+
"message": "success",
|
|
78
|
+
"data": {
|
|
79
|
+
"records": [...],
|
|
80
|
+
"total": 100,
|
|
81
|
+
"size": 20,
|
|
82
|
+
"current": 1
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
<!-- 按需补充其他接口详情 -->
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 3. 后端代码结构
|
|
92
|
+
|
|
93
|
+
### 3.1 Entity
|
|
94
|
+
|
|
95
|
+
**路径**: `modules-center/{module}-center/{module}-service/src/main/java/com/twsz/mom/{module}/{sub}/model/{Entity}.java`
|
|
96
|
+
|
|
97
|
+
```java
|
|
98
|
+
@Data
|
|
99
|
+
@EqualsAndHashCode(callSuper = false)
|
|
100
|
+
@JsonInclude(JsonInclude.Include.NON_NULL)
|
|
101
|
+
@TableName("<table_name>")
|
|
102
|
+
public class {Entity} extends BaseModel implements Serializable {
|
|
103
|
+
|
|
104
|
+
private static final long serialVersionUID = 1L;
|
|
105
|
+
|
|
106
|
+
@TableId(type = IdType.ASSIGN_ID)
|
|
107
|
+
@JsonSerialize(using = ToStringSerializer.class)
|
|
108
|
+
private Long id;
|
|
109
|
+
|
|
110
|
+
// 业务字段(含 @ExcelProperty 注解)
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 3.2 Mapper
|
|
115
|
+
|
|
116
|
+
**接口路径**: `.../{module}/mapper/{Entity}Mapper.java`
|
|
117
|
+
**XML 路径**: `resources/mapper/{module}/{Entity}Mapper.xml`
|
|
118
|
+
|
|
119
|
+
```java
|
|
120
|
+
@Mapper
|
|
121
|
+
public interface {Entity}Mapper extends BaseMapper<{Entity}> {
|
|
122
|
+
IPage<{Entity}> pageSearch(Page<{Entity}> p, @Param("entity") {Entity} entity);
|
|
123
|
+
List<{Entity}> list(@Param("entity") {Entity} entity);
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**XML 关键片段**:
|
|
128
|
+
- `<sql id="Columns">` — 字段列表
|
|
129
|
+
- `<sql id="Where">` — 查询条件
|
|
130
|
+
- `pageSearch` — 分页查询
|
|
131
|
+
- `list` — 不分页列表
|
|
132
|
+
|
|
133
|
+
### 3.3 Service
|
|
134
|
+
|
|
135
|
+
**接口路径**: `.../{module}/service/{Entity}Service.java`
|
|
136
|
+
|
|
137
|
+
```java
|
|
138
|
+
public interface {Entity}Service extends IService<{Entity}> {
|
|
139
|
+
ResponseWrapper<?> insert({Entity} entity);
|
|
140
|
+
ResponseWrapper<String> update({Entity} entity);
|
|
141
|
+
ResponseWrapper<String> deleteByIds(Collection<BigDecimal> ids);
|
|
142
|
+
ResponseWrapper<Page<{Entity}>> search(PageForm<{Entity}> pageForm);
|
|
143
|
+
List<{Entity}> list({Entity} entity);
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 3.4 ServiceImpl
|
|
148
|
+
|
|
149
|
+
**路径**: `.../{module}/service/impl/{Entity}ServiceImpl.java`
|
|
150
|
+
|
|
151
|
+
关键逻辑:
|
|
152
|
+
- `insert()`: 校验唯一性等
|
|
153
|
+
- `update()`: 校验存在性 + 唯一性
|
|
154
|
+
- `deleteByIds()`: 批量删除
|
|
155
|
+
- `search()`: 分页查询
|
|
156
|
+
|
|
157
|
+
### 3.5 Controller
|
|
158
|
+
|
|
159
|
+
**路径**: `.../{module}/controller/{Entity}Controller.java`
|
|
160
|
+
|
|
161
|
+
```java
|
|
162
|
+
@RestController
|
|
163
|
+
@RequestMapping("/api/{api-path}/{entity}")
|
|
164
|
+
public class {Entity}Controller {
|
|
165
|
+
|
|
166
|
+
@PostMapping("/search")
|
|
167
|
+
public ResponseWrapper<Page<{Entity}>> search(@RequestBody PageForm<{Entity}> pageForm) { ... }
|
|
168
|
+
|
|
169
|
+
@PostMapping("/add")
|
|
170
|
+
public ResponseWrapper<?> add(@RequestBody {Entity} entity) { ... }
|
|
171
|
+
|
|
172
|
+
@PutMapping("/update")
|
|
173
|
+
public ResponseWrapper<String> update(@RequestBody {Entity} entity) { ... }
|
|
174
|
+
|
|
175
|
+
@DeleteMapping("/delete")
|
|
176
|
+
public ResponseWrapper<String> delete(@RequestBody Collection<BigDecimal> ids) { ... }
|
|
177
|
+
|
|
178
|
+
@PostMapping("/export")
|
|
179
|
+
public void export(@RequestBody {Entity} entity, HttpServletResponse response) { ... }
|
|
180
|
+
|
|
181
|
+
@PostMapping("/uploadExcel")
|
|
182
|
+
public ResponseWrapper<?> uploadExcel(@RequestParam("file") MultipartFile file) { ... }
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## 4. 前端代码结构
|
|
189
|
+
|
|
190
|
+
### 4.1 API 文件
|
|
191
|
+
|
|
192
|
+
**路径**: `src/api/{domain}/{entity}.js`
|
|
193
|
+
|
|
194
|
+
```javascript
|
|
195
|
+
import axios from '@/libs/request'
|
|
196
|
+
import { exportExcel } from '../file'
|
|
197
|
+
const root = '/mm/api' // 根据实际微服务调整
|
|
198
|
+
|
|
199
|
+
// search, add, update, delete, export, uploadExcel
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### 4.2 列表页
|
|
203
|
+
|
|
204
|
+
**路径**: `src/views/{domain}/{entity}/index.vue`
|
|
205
|
+
|
|
206
|
+
- 组件: `search-table` + `indexPage` mixin
|
|
207
|
+
- 搜索条件: <列出搜索字段>
|
|
208
|
+
- 表格列: <列出列定义>
|
|
209
|
+
- 工具栏: 新增 / 编辑 / 查看 / 删除 / 导出 / 导入
|
|
210
|
+
|
|
211
|
+
### 4.3 表单页
|
|
212
|
+
|
|
213
|
+
**路径**: `src/views/{domain}/{entity}/{entity}-form.vue`
|
|
214
|
+
|
|
215
|
+
- 组件: `master-sub`
|
|
216
|
+
- 表单字段: <列出字段及校验规则>
|
|
217
|
+
- 提交逻辑: 判断新增/编辑 → 调用对应 API
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## 5. 业务逻辑流程
|
|
222
|
+
|
|
223
|
+
### 5.1 核心流程
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
<ASCII 流程图>
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### 5.2 校验规则
|
|
230
|
+
|
|
231
|
+
| 编号 | 校验项 | 规则 | 错误提示 |
|
|
232
|
+
|:----:|--------|------|----------|
|
|
233
|
+
| V-01 | | | |
|
|
234
|
+
|
|
235
|
+
### 5.3 状态流转(如有)
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
<状态机图>
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## 6. 集成点
|
|
244
|
+
|
|
245
|
+
### 6.1 被调用方
|
|
246
|
+
|
|
247
|
+
| 调用方 | 接口方式 | 说明 |
|
|
248
|
+
|--------|----------|------|
|
|
249
|
+
| | | |
|
|
250
|
+
|
|
251
|
+
### 6.2 菜单权限
|
|
252
|
+
|
|
253
|
+
| 菜单名 | 权限标识 | 类型 |
|
|
254
|
+
|--------|----------|------|
|
|
255
|
+
| | | 路由 / 按钮 / API |
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## 7. 设计决策记录
|
|
260
|
+
|
|
261
|
+
| 决策 | 选项 | 结论 | 原因 |
|
|
262
|
+
|------|------|------|------|
|
|
263
|
+
| | | | |
|