@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,462 @@
|
|
|
1
|
+
# MES PRD to Code Schema
|
|
2
|
+
# 功能文档 → 技术文档 → 完整代码
|
|
3
|
+
# 工件流: parse → confirm-scope → tech-design → tasks → test-gen → code
|
|
4
|
+
|
|
5
|
+
name: mes-prd-to-code
|
|
6
|
+
description: |
|
|
7
|
+
MES 项目专属 Schema:从业务功能文档端到端生成技术文档和完整代码。
|
|
8
|
+
|
|
9
|
+
输入:功能文档(*.md + *-流程图.drawio + *.html)
|
|
10
|
+
输出:技术设计文档 + 实施任务清单 + 完整可编译代码
|
|
11
|
+
|
|
12
|
+
核心能力:
|
|
13
|
+
- 自动解析结构化功能文档(字段表、DDL、业务逻辑、接口定义)
|
|
14
|
+
- 苏格拉底式对话确认模块归属、实施范围、实现细节
|
|
15
|
+
- 适配 MES 项目规范(Oracle + BaseModel + ResponseWrapper + Vue2/ViewUI)
|
|
16
|
+
- 支持多模块文档(识别子模块、依赖图、用户选择范围)
|
|
17
|
+
- 不预定义模式,跟随功能文档描述生成对应代码
|
|
18
|
+
|
|
19
|
+
项目结构(相对路径,相对于项目根目录):
|
|
20
|
+
- 后端: mom-master/(Spring Boot + MyBatis-Plus + Oracle)
|
|
21
|
+
- 前端: implat-ui/(Vue2 + ViewUI + VXETable)
|
|
22
|
+
- 功能文档: 由用户提供文件路径
|
|
23
|
+
|
|
24
|
+
apply:
|
|
25
|
+
requires:
|
|
26
|
+
- code # 实施前必须完成所有工件
|
|
27
|
+
|
|
28
|
+
artifacts:
|
|
29
|
+
- id: parse
|
|
30
|
+
name: 功能文档解析
|
|
31
|
+
description: 解析功能文档,提取结构化信息,识别子模块和依赖关系
|
|
32
|
+
requires: []
|
|
33
|
+
template: parse.md
|
|
34
|
+
instruction: |
|
|
35
|
+
读取用户提供的功能文档文件,完成以下解析工作:
|
|
36
|
+
|
|
37
|
+
## 1. 文件识别
|
|
38
|
+
- 读取 *.md 文件(主功能文档)
|
|
39
|
+
- 读取 *-流程图.drawio 文件(如有,提取流程逻辑)
|
|
40
|
+
- 读取 *.html 文件(如有,提取原型界面信息)
|
|
41
|
+
|
|
42
|
+
## 2. 子模块识别
|
|
43
|
+
- 扫描文档中的"模块一/模块二/..."或"功能一/功能二/..."标记
|
|
44
|
+
- 如果没有显式分模块,将整份文档视为单个模块
|
|
45
|
+
- 对每个子模块提取:名称、类型(新建CRUD/修改已有/外部接口/记录表)
|
|
46
|
+
|
|
47
|
+
## 3. 每个子模块的信息提取
|
|
48
|
+
|
|
49
|
+
### 3.1 功能简介
|
|
50
|
+
- 菜单路径 → 推断前端目录归属
|
|
51
|
+
- 使用人员 → 权限设计参考
|
|
52
|
+
- 功能描述 → 模块概述
|
|
53
|
+
|
|
54
|
+
### 3.2 字段/数据提取
|
|
55
|
+
- 主表字段表 → Entity 字段列表
|
|
56
|
+
- 子表字段表(如有)→ 子表 Entity 字段列表
|
|
57
|
+
- 字段类型映射:
|
|
58
|
+
- VARCHAR → String
|
|
59
|
+
- INT/BIGINT → Long
|
|
60
|
+
- DECIMAL → BigDecimal
|
|
61
|
+
- DATETIME/DATE → Date
|
|
62
|
+
- TINYINT → Integer
|
|
63
|
+
|
|
64
|
+
### 3.3 数据表结构
|
|
65
|
+
- 提取表名、字段、类型、约束
|
|
66
|
+
- 标记需要适配的项:
|
|
67
|
+
- AUTO_INCREMENT → 雪花算法
|
|
68
|
+
- MySQL 类型 → Oracle 类型
|
|
69
|
+
- 非标准审计字段 → BaseModel 审计字段
|
|
70
|
+
|
|
71
|
+
### 3.4 业务逻辑
|
|
72
|
+
- 提取"补充逻辑"/"特殊逻辑"/"业务逻辑"章节
|
|
73
|
+
- 提取校验规则(唯一性、非空、格式校验等)
|
|
74
|
+
- 提取导入/导出规则
|
|
75
|
+
- 从流程图提取状态流转(如有)
|
|
76
|
+
|
|
77
|
+
### 3.5 接口定义
|
|
78
|
+
- 提取外部接口(如有)的方法、路径、请求/响应格式
|
|
79
|
+
- 标记调用方向(设备→MES / MES→外部系统)
|
|
80
|
+
|
|
81
|
+
### 3.6 按钮/操作
|
|
82
|
+
- 提取按钮清单 → API 接口清单
|
|
83
|
+
- 映射:新增/编辑/查看/删除/导入/导出 → 标准 CRUD 接口
|
|
84
|
+
|
|
85
|
+
## 4. 依赖关系分析
|
|
86
|
+
- 分析子模块之间的数据依赖(A 模块的表被 B 模块引用)
|
|
87
|
+
- 分析子模块之间的功能依赖(B 模块修改 A 模块创建的功能)
|
|
88
|
+
- 绘制依赖关系图(ASCII)
|
|
89
|
+
|
|
90
|
+
## 5. 输出格式
|
|
91
|
+
按 parse.md 模板输出解析报告,包含:
|
|
92
|
+
- 模块清单表
|
|
93
|
+
- 每个模块的字段清单、表结构、业务逻辑摘要
|
|
94
|
+
- 依赖关系图
|
|
95
|
+
- 需要用户确认的疑问点
|
|
96
|
+
|
|
97
|
+
注意:此阶段只做解析,不做任何技术决策。技术决策在后续对话中完成。
|
|
98
|
+
output: parse.md
|
|
99
|
+
|
|
100
|
+
- id: confirm-scope
|
|
101
|
+
name: 范围确认
|
|
102
|
+
description: 苏格拉底式对话确认模块归属、实施范围、架构决策
|
|
103
|
+
requires: [parse]
|
|
104
|
+
template: confirm-scope.md
|
|
105
|
+
instruction: |
|
|
106
|
+
基于解析报告,以苏格拉底式对话与用户确认以下内容。
|
|
107
|
+
逐个问题提问,不要一次问多个。
|
|
108
|
+
|
|
109
|
+
## 必须确认的问题
|
|
110
|
+
|
|
111
|
+
### Q0: 项目根目录
|
|
112
|
+
- 提问:"项目根目录在哪里?(mom-master 和 implat-ui 所在的目录)"
|
|
113
|
+
- 说明:后续所有代码路径将基于此目录生成
|
|
114
|
+
- 使用 codegraph_explore 或 ls 验证目录结构是否正确
|
|
115
|
+
|
|
116
|
+
### Q1: 实施范围(仅多模块时)
|
|
117
|
+
如果解析出多个子模块:
|
|
118
|
+
- 展示模块清单和依赖关系图
|
|
119
|
+
- 提问:"识别到 N 个子模块,依赖关系如下: ... 本次实施哪些?"
|
|
120
|
+
- 等待用户选择
|
|
121
|
+
|
|
122
|
+
### Q2: 后端模块归属
|
|
123
|
+
- 提问:"后端代码归属哪个 center?"
|
|
124
|
+
- 给出建议(根据功能文档的菜单路径推断)
|
|
125
|
+
- 选项参考:modules-center 下的 material-center / production-center / quality-center 等
|
|
126
|
+
|
|
127
|
+
### Q3: 后端包路径
|
|
128
|
+
- 提问:"后端包路径?"
|
|
129
|
+
- 给出建议:com.twsz.mom.{module}.{sub-package}
|
|
130
|
+
- 参照已有代码的包结构
|
|
131
|
+
|
|
132
|
+
### Q4: 前端目录
|
|
133
|
+
- 提问:"前端页面和 API 放在哪个目录?"
|
|
134
|
+
- 给出建议:
|
|
135
|
+
- API: src/api/{domain}/
|
|
136
|
+
- 页面: src/views/{domain}/{entity}/
|
|
137
|
+
|
|
138
|
+
### Q5: 已有代码影响
|
|
139
|
+
- 使用 codegraph_explore 扫描是否已有相关代码
|
|
140
|
+
- 如果有:展示已有代码,提问是否需要修改
|
|
141
|
+
- 如果没有:标注为全部新建
|
|
142
|
+
|
|
143
|
+
### Q6: 特殊技术决策
|
|
144
|
+
根据解析结果自动判断是否需要询问:
|
|
145
|
+
- 如果有"单据编号"字段 → 确认是否使用 @AutoGenCode
|
|
146
|
+
- 如果有状态字段 → 确认是否需要状态流转(审核/弃审)
|
|
147
|
+
- 如果有外部接口 → 确认接口鉴权方式
|
|
148
|
+
- 如果涉及已有模块修改 → 确认修改范围和回归测试
|
|
149
|
+
|
|
150
|
+
### Q7: 表名前缀
|
|
151
|
+
- 提问:"表名的模块前缀是什么?例如 pcba_(PCBA)、mm_(仓储)、wip_(生产)、bd_(基础数据)"
|
|
152
|
+
- 根据模块推断建议值,等待用户确认
|
|
153
|
+
- 所有新建表将使用此前缀,如 `{prefix}_cad_data`
|
|
154
|
+
|
|
155
|
+
### Q8: 表空间选择
|
|
156
|
+
- 提问:"数据表归属哪个业务模块?(决定表空间)"
|
|
157
|
+
- 表空间映射规则:
|
|
158
|
+
- 生产/车间数据 → MES_DATA_WORKS(数据)/ MES_IDX_WORKS(索引)
|
|
159
|
+
- 仓储/物流数据 → MES_DATA_WMS(数据)/ MES_IDX_WMS(索引)
|
|
160
|
+
- 基础/通用数据 → MES_DATA_COM(数据)/ MES_IDX_COM(索引)
|
|
161
|
+
- 默认根据模块推断,等待用户确认
|
|
162
|
+
|
|
163
|
+
### Q9: 索引策略
|
|
164
|
+
- 根据解析结果中的业务规则,分析需要建索引的字段,提出建议:
|
|
165
|
+
- 唯一性校验字段 → 唯一索引(U1, U2...)
|
|
166
|
+
- 高频搜索字段 → 普通索引(N1, N2...)
|
|
167
|
+
- 外键关联字段 → 普通索引
|
|
168
|
+
- **唯一索引规范**:必须以 `org_id` 作为首列,组成联合唯一索引,格式:`(org_id, 业务字段1, 业务字段2...)`
|
|
169
|
+
- 向用户展示建议的索引清单,等待确认或调整
|
|
170
|
+
- 这是持续交互过程,用户可以增减索引字段
|
|
171
|
+
|
|
172
|
+
## 确认结果记录
|
|
173
|
+
将所有确认结果写入 confirm-scope 记录中,作为技术文档的输入。
|
|
174
|
+
格式:
|
|
175
|
+
```
|
|
176
|
+
## 确认结果
|
|
177
|
+
- 实施范围: [模块列表]
|
|
178
|
+
- 后端 center: xxx
|
|
179
|
+
- 后端包路径: com.twsz.mom.xxx
|
|
180
|
+
- 前端 API 目录: src/api/xxx/
|
|
181
|
+
- 前端页面目录: src/views/xxx/
|
|
182
|
+
- 表名前缀: {prefix}_
|
|
183
|
+
- 表空间: MES_DATA_xxx(数据)/ MES_IDX_xxx(索引)
|
|
184
|
+
- 编号生成: @AutoGenCode / 无
|
|
185
|
+
- 状态流转: 有(审核/弃审) / 无
|
|
186
|
+
- 已有代码影响: [列表]
|
|
187
|
+
- 索引策略: [索引清单]
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
- id: tech-design
|
|
191
|
+
name: 技术设计文档
|
|
192
|
+
description: 基于确认结果生成完整技术设计文档
|
|
193
|
+
requires: [parse, confirm-scope]
|
|
194
|
+
template: tech-design.md
|
|
195
|
+
instruction: |
|
|
196
|
+
基于解析报告和确认结果,生成完整的技术设计文档。
|
|
197
|
+
|
|
198
|
+
## 文档结构
|
|
199
|
+
|
|
200
|
+
### 1. 数据库设计
|
|
201
|
+
- 读取 confirm-scope 中的表名前缀、表空间、索引策略
|
|
202
|
+
- 将功能文档的 DDL 适配为 Oracle 语法
|
|
203
|
+
- 适配规则:
|
|
204
|
+
- INT/BIGINT AUTO_INCREMENT → NUMBER(19) 雪花算法
|
|
205
|
+
- VARCHAR(n) → NVARCHAR2(n)
|
|
206
|
+
- DATETIME → DATE
|
|
207
|
+
- CURRENT_TIMESTAMP → SYSDATE
|
|
208
|
+
- 审计字段统一为: created_by, created_date, last_updated_by, last_updated_date
|
|
209
|
+
- 去除 is_deleted 逻辑删除字段(MES 使用物理删除)
|
|
210
|
+
- 每张表必须包含 org_id NUMBER(19) NOT NULL 字段(多租户字段)
|
|
211
|
+
**重要**: org_id 仅在 DDL 中定义(用于唯一索引组合列),不在 Entity 中声明。
|
|
212
|
+
MyBatis-Plus TenantLineInnerInterceptor 已配置多租户,INSERT/SELECT 自动注入 org_id,业务代码无需显式处理。
|
|
213
|
+
{{rules}}
|
|
214
|
+
- 包含完整 DDL + 索引 + 注释 + 表空间
|
|
215
|
+
- **表名**: 使用 confirm-scope 确认的模块前缀,如 `{prefix}_cad_data`
|
|
216
|
+
- **索引命名规范**(严格遵守):
|
|
217
|
+
- 主键索引: `{tableName}_PK`
|
|
218
|
+
- 普通索引: `{tableName}_N1`, `{tableName}_N2`, ... `{tableName}_N5`
|
|
219
|
+
- 唯一索引: `{tableName}_U1`, `{tableName}_U2`, ... `{tableName}_U5`
|
|
220
|
+
- 唯一索引必须以 `org_id` 为首列: `UNIQUE INDEX xxx_U1(tableName, org_id, 业务字段1, ...)`
|
|
221
|
+
- **表空间**(使用 confirm-scope 确认的值):
|
|
222
|
+
- 数据段: TABLESPACE {data_tablespace}
|
|
223
|
+
- 索引段: USING INDEX TABLESPACE {index_tablespace}
|
|
224
|
+
- 标注建表方式: dbx MCP(优先)/ SQL 脚本
|
|
225
|
+
|
|
226
|
+
### 2. API 接口设计
|
|
227
|
+
- 标准 CRUD 接口(根据功能文档的按钮/操作推导):
|
|
228
|
+
- POST /{entity}/search — 分页查询
|
|
229
|
+
- POST /{entity}/add — 新增
|
|
230
|
+
- PUT /{entity}/update — 修改
|
|
231
|
+
- DELETE /{entity}/delete — 批量删除
|
|
232
|
+
- POST /{entity}/export — 导出
|
|
233
|
+
- POST /{entity}/uploadExcel — 导入(如有)
|
|
234
|
+
- 外部接口(如功能文档有定义):
|
|
235
|
+
- 按功能文档定义的路径和方法
|
|
236
|
+
- 请求/响应格式按功能文档
|
|
237
|
+
- 每个接口给出:
|
|
238
|
+
- 请求示例 JSON
|
|
239
|
+
- 响应示例 JSON
|
|
240
|
+
- 错误码
|
|
241
|
+
|
|
242
|
+
### 3. 后端代码结构
|
|
243
|
+
对每个 Entity 给出:
|
|
244
|
+
|
|
245
|
+
#### Entity(完整代码模板)
|
|
246
|
+
- 继承 BaseModel(com.twsz.mom.ds.model.BaseModel,不是 com.twsz.mom.common.base.BaseModel)
|
|
247
|
+
- @TableName, @Data, @EqualsAndHashCode(callSuper=true)
|
|
248
|
+
- @JsonInclude(JsonInclude.Include.NON_NULL)
|
|
249
|
+
- @TableId(type=IdType.ASSIGN_ID) + @JsonSerialize(ToStringSerializer) — id 字段必须在 Entity 中显式声明
|
|
250
|
+
- BaseModel 已提供审计字段(createdBy/Date, lastUpdatedBy/Date),Entity 中禁止重复声明
|
|
251
|
+
- ViewModel 已提供 opt 字段,Entity 中禁止重复声明
|
|
252
|
+
- org_id 禁止在 Entity 中声明(多租户 TenantLineInnerInterceptor 自动处理)
|
|
253
|
+
- @ExcelProperty("中文名")(每个业务字段,支持导入导出)
|
|
254
|
+
- 非数据库字段: @TableField(exist = false) + @ExcelIgnore
|
|
255
|
+
- Long 类型字段: @JsonSerialize(using = ToStringSerializer.class)(防止 JS 精度丢失)
|
|
256
|
+
- @AutoGenCode(如有编号字段)
|
|
257
|
+
- 主子表: @TableField(exist = false) private List<DetailEntity> details
|
|
258
|
+
- 给出完整 Java 代码
|
|
259
|
+
{{rules}}
|
|
260
|
+
|
|
261
|
+
#### Mapper(完整代码模板)
|
|
262
|
+
- 接口继承 BaseMapper<T>
|
|
263
|
+
- 方法: pageSearch + list
|
|
264
|
+
- XML: Columns/Where 片段 + 查询语句
|
|
265
|
+
- 给出完整代码
|
|
266
|
+
|
|
267
|
+
#### Service(方法签名 + 关键逻辑)
|
|
268
|
+
- 接口方法签名
|
|
269
|
+
- 关键业务逻辑用伪代码描述:
|
|
270
|
+
- 校验规则
|
|
271
|
+
- 唯一性检查
|
|
272
|
+
- 事务控制
|
|
273
|
+
- 导入逻辑
|
|
274
|
+
- 不要求完整实现代码
|
|
275
|
+
|
|
276
|
+
#### Controller(完整代码模板)
|
|
277
|
+
- @RestController + @RequestMapping("/api/v1/entity-kebab-case")(含版本号 /api/v1/)
|
|
278
|
+
- @Autowired 或 @Resource 字段注入(项目惯例,非构造器注入)
|
|
279
|
+
- 统一返回 ResponseWrapper<T>(com.twsz.mom.core.common.ResponseWrapper)
|
|
280
|
+
- 标准方法: search(POST) / save(POST) / delete(DELETE) / list(POST) / export(POST)
|
|
281
|
+
- Controller 只做参数校验和结果封装,禁止写业务逻辑
|
|
282
|
+
- 给出完整代码
|
|
283
|
+
{{rules}}
|
|
284
|
+
|
|
285
|
+
### 4. 前端代码结构
|
|
286
|
+
对每个页面给出:
|
|
287
|
+
|
|
288
|
+
#### API 文件
|
|
289
|
+
- 完整 JS 代码(import + 各方法)
|
|
290
|
+
|
|
291
|
+
#### 列表页(配置描述)
|
|
292
|
+
- 搜索条件字段
|
|
293
|
+
- 表格列定义(列名、key、slot)
|
|
294
|
+
- 工具栏按钮
|
|
295
|
+
- 组件: search-table + indexPage mixin
|
|
296
|
+
|
|
297
|
+
#### 表单页(配置描述)
|
|
298
|
+
- 表单字段列表(控件类型、必填、校验规则)
|
|
299
|
+
- 组件: master-sub + Form
|
|
300
|
+
- 提交逻辑
|
|
301
|
+
|
|
302
|
+
### 5. 业务逻辑流程
|
|
303
|
+
- 用 ASCII 流程图描述核心业务操作
|
|
304
|
+
- 标注校验点和异常处理
|
|
305
|
+
- 如有状态流转,画出状态机
|
|
306
|
+
|
|
307
|
+
### 6. 集成点 + 菜单权限
|
|
308
|
+
- 被其他模块调用的方式
|
|
309
|
+
- 菜单注册 SQL(c_sys_resource)
|
|
310
|
+
|
|
311
|
+
## 对话 2: 实现确认
|
|
312
|
+
生成技术文档初稿后,以苏格拉底式对话确认:
|
|
313
|
+
- 表名和字段名是否确认?
|
|
314
|
+
- API 路径是否正确?
|
|
315
|
+
- 前端组件选型是否符合预期?
|
|
316
|
+
- 特殊校验规则是否完整?
|
|
317
|
+
- 用户确认后更新技术文档
|
|
318
|
+
|
|
319
|
+
## 输出
|
|
320
|
+
最终版 tech-design.md
|
|
321
|
+
|
|
322
|
+
output: tech-design.md
|
|
323
|
+
|
|
324
|
+
- id: tasks
|
|
325
|
+
name: 实施任务清单
|
|
326
|
+
description: 基于技术文档拆分实施任务,每个任务含完整代码
|
|
327
|
+
requires: [tech-design]
|
|
328
|
+
template: tasks.md
|
|
329
|
+
instruction: |
|
|
330
|
+
基于技术设计文档,拆分为可执行的实施任务列表。
|
|
331
|
+
|
|
332
|
+
## 任务拆分原则
|
|
333
|
+
1. 每个任务足够小(2-5 分钟完成)
|
|
334
|
+
2. 包含精确的文件路径(匹配 MES 项目包结构)
|
|
335
|
+
3. 包含完整的代码(从技术文档的模板中提取)
|
|
336
|
+
4. 包含验证步骤
|
|
337
|
+
5. 任务之间尽量独立
|
|
338
|
+
|
|
339
|
+
## 任务顺序
|
|
340
|
+
按以下顺序排列:
|
|
341
|
+
|
|
342
|
+
### 数据库任务
|
|
343
|
+
1. 建表 DDL(标注 dbx MCP 或 SQL 脚本)
|
|
344
|
+
|
|
345
|
+
### 后端任务(每个 Entity 一组)
|
|
346
|
+
2. Entity 实体类(完整代码)
|
|
347
|
+
3. Mapper 接口(完整代码)
|
|
348
|
+
4. Mapper XML(完整代码)
|
|
349
|
+
5. Service 接口(完整代码)
|
|
350
|
+
6. ServiceImpl 实现(完整代码,含业务逻辑)
|
|
351
|
+
7. Controller(完整代码)
|
|
352
|
+
|
|
353
|
+
### 前端任务(每个页面一组)
|
|
354
|
+
8. API 文件(完整代码)
|
|
355
|
+
9. 列表页 index.vue(完整代码)
|
|
356
|
+
10. 表单页 form.vue(完整代码)
|
|
357
|
+
11. 子表页 table-form.vue(如有主子表,完整代码)
|
|
358
|
+
|
|
359
|
+
### 测试任务(每个 ServiceImpl 一组)
|
|
360
|
+
12. ServiceImpl 单元测试(XxxServiceImplMockTest.java)
|
|
361
|
+
|
|
362
|
+
### 配置任务
|
|
363
|
+
13. 菜单注册 SQL
|
|
364
|
+
|
|
365
|
+
### 如有外部接口
|
|
366
|
+
12. 外部接口 Controller(独立路径)
|
|
367
|
+
13. 外部接口 Service 逻辑
|
|
368
|
+
|
|
369
|
+
## 任务格式
|
|
370
|
+
```
|
|
371
|
+
- [ ] Task-NNN: <标题>
|
|
372
|
+
文件: <精确路径>
|
|
373
|
+
描述: <具体实现指令>
|
|
374
|
+
代码:
|
|
375
|
+
```java/vue/js/sql
|
|
376
|
+
<完整代码>
|
|
377
|
+
```
|
|
378
|
+
验证: <验证步骤>
|
|
379
|
+
依赖: Task-XXX
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
## 任务依赖图
|
|
383
|
+
用 ASCII 图展示任务依赖关系
|
|
384
|
+
|
|
385
|
+
output: tasks.md
|
|
386
|
+
|
|
387
|
+
- id: test-gen
|
|
388
|
+
name: 测试代码生成
|
|
389
|
+
description: 基于 ServiceImpl 生成单元测试代码
|
|
390
|
+
requires: [tasks]
|
|
391
|
+
template: test-gen.md
|
|
392
|
+
instruction: |
|
|
393
|
+
基于 tasks.md 中的 ServiceImpl 代码,生成对应的单元测试。
|
|
394
|
+
|
|
395
|
+
生成前请先读取本 schema 目录下的 references.md,了解可用的公共工具类和方法,测试中 Mock 的依赖方法签名需与 references.md 一致。
|
|
396
|
+
|
|
397
|
+
## 测试规范
|
|
398
|
+
- 测试类名 = 原类名 + MockTest(如 PcCadDataServiceImpl → PcCadDataServiceImplMockTest)
|
|
399
|
+
- 框架: JUnit 5 + Mockito
|
|
400
|
+
- @ExtendWith(MockitoExtension.class)
|
|
401
|
+
- @Mock 模拟依赖(Mapper、其他Service)
|
|
402
|
+
- @InjectMocks 注入被测类
|
|
403
|
+
- setUp 中使用 ReflectionTestUtils.setField 注入 baseMapper
|
|
404
|
+
- 使用 @Nested 类按方法分组,@DisplayName 描述场景
|
|
405
|
+
- 测试方法命名: should_预期行为_when_条件()
|
|
406
|
+
|
|
407
|
+
## 必须覆盖的场景
|
|
408
|
+
- saveModel: 新增成功、编辑成功、乐观锁冲突
|
|
409
|
+
- deleteByIds: 批量删除+级联
|
|
410
|
+
- search: 分页查询
|
|
411
|
+
- list: 列表查询
|
|
412
|
+
- importExcel/uploadExcel: 逐行校验、跳过统计(如有)
|
|
413
|
+
|
|
414
|
+
## 文件路径
|
|
415
|
+
测试文件放在: src/test/java/{与ServiceImpl相同的包路径}/
|
|
416
|
+
|
|
417
|
+
## 输出
|
|
418
|
+
- 每个 ServiceImpl 对应一个测试文件
|
|
419
|
+
- 包含完整可编译的测试代码
|
|
420
|
+
{{rules}}
|
|
421
|
+
output: test-gen.md
|
|
422
|
+
|
|
423
|
+
- id: code
|
|
424
|
+
name: 代码生成
|
|
425
|
+
description: 按任务清单生成完整代码文件
|
|
426
|
+
requires: [tasks, test-gen]
|
|
427
|
+
template: code-generation.md
|
|
428
|
+
instruction: |
|
|
429
|
+
按任务清单逐个生成代码文件。
|
|
430
|
+
|
|
431
|
+
生成前请先读取本 schema 目录下的 references.md,了解可用的公共工具类和方法,优先复用已有方法,避免重复实现。
|
|
432
|
+
|
|
433
|
+
## 执行方式
|
|
434
|
+
1. 按任务依赖顺序执行
|
|
435
|
+
2. 每个任务:
|
|
436
|
+
a. 从 tasks.md 中取出代码
|
|
437
|
+
b. 写入精确的文件路径
|
|
438
|
+
c. 验证文件创建成功
|
|
439
|
+
3. 数据库任务:通过 dbx MCP 或输出 SQL 脚本
|
|
440
|
+
|
|
441
|
+
## 代码规范检查
|
|
442
|
+
生成的代码必须符合以下 MES 规范:
|
|
443
|
+
- Java 8 语法,不使用 Java 9+ 特性
|
|
444
|
+
- Lombok 注解(@Data, @EqualsAndHashCode(callSuper=true) 等)
|
|
445
|
+
- SLF4J 日志(@Slf4j),不用 System.out.println
|
|
446
|
+
- LambdaQueryWrapper,不用字符串字段名
|
|
447
|
+
- ResponseWrapper<T> 统一响应
|
|
448
|
+
- BaseModel 继承(com.twsz.mom.ds.model.BaseModel)
|
|
449
|
+
- Entity: callSuper=true, 不重复声明 id/orgId/opt/审计字段
|
|
450
|
+
- Controller: @Autowired, @RequestMapping("/api/v1/kebab-case")
|
|
451
|
+
- 数据库字符串字段使用 NVARCHAR2
|
|
452
|
+
- Vue 2 Options API
|
|
453
|
+
- View Design 4 组件
|
|
454
|
+
- indexPage mixin / master-sub / tw-table 组件
|
|
455
|
+
{{rules}}
|
|
456
|
+
|
|
457
|
+
## 输出
|
|
458
|
+
- 所有代码文件已写入磁盘
|
|
459
|
+
- 生成文件清单
|
|
460
|
+
- 标注需要用户手动执行的操作(如建表 SQL、菜单注册 SQL)
|
|
461
|
+
|
|
462
|
+
output: code-generation.md
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# 代码生成报告: <功能名称>
|
|
2
|
+
|
|
3
|
+
> 输入: 任务清单 (tasks.md)
|
|
4
|
+
> 生成日期: <日期>
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 执行摘要
|
|
9
|
+
|
|
10
|
+
| 维度 | 数量 |
|
|
11
|
+
|------|:----:|
|
|
12
|
+
| 总任务数 | |
|
|
13
|
+
| 已完成 | |
|
|
14
|
+
| 跳过 | |
|
|
15
|
+
| 失败 | |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 文件清单
|
|
20
|
+
|
|
21
|
+
### 后端文件
|
|
22
|
+
|
|
23
|
+
| # | 任务 | 文件路径 | 状态 |
|
|
24
|
+
|:-:|------|----------|:----:|
|
|
25
|
+
| 1 | Task-002 | `modules-center/.../model/{Entity}.java` | ✅ / ❌ |
|
|
26
|
+
| 2 | Task-003 | `.../mapper/{Entity}Mapper.java` | |
|
|
27
|
+
| 3 | Task-004 | `resources/mapper/{module}/{Entity}Mapper.xml` | |
|
|
28
|
+
| 4 | Task-005 | `.../service/{Entity}Service.java` | |
|
|
29
|
+
| 5 | Task-006 | `.../service/impl/{Entity}ServiceImpl.java` | |
|
|
30
|
+
| 6 | Task-007 | `.../controller/{Entity}Controller.java` | |
|
|
31
|
+
|
|
32
|
+
### 前端文件
|
|
33
|
+
|
|
34
|
+
| # | 任务 | 文件路径 | 状态 |
|
|
35
|
+
|:-:|------|----------|:----:|
|
|
36
|
+
| 7 | Task-008 | `src/api/{domain}/{entity}.js` | ✅ / ❌ |
|
|
37
|
+
| 8 | Task-009 | `src/views/{domain}/{entity}/index.vue` | |
|
|
38
|
+
| 9 | Task-010 | `src/views/{domain}/{entity}/{entity}-form.vue` | |
|
|
39
|
+
|
|
40
|
+
### SQL 文件
|
|
41
|
+
|
|
42
|
+
| # | 任务 | 文件路径 | 状态 |
|
|
43
|
+
|:-:|------|----------|:----:|
|
|
44
|
+
| 10 | Task-001 | 建表 DDL | ✅ / ⏳ 待手动执行 |
|
|
45
|
+
| 11 | Task-011 | 菜单注册 SQL | ✅ / ⏳ 待手动执行 |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 需要手动执行的操作
|
|
50
|
+
|
|
51
|
+
| # | 操作 | SQL / 命令 | 说明 |
|
|
52
|
+
|:-:|------|-----------|------|
|
|
53
|
+
| 1 | 建表 | `<DDL>` | 在 Oracle 中执行 |
|
|
54
|
+
| 2 | 菜单注册 | `<INSERT>` | 在 Oracle 中执行 |
|
|
55
|
+
| 3 | 重启后端 | — | 加载新代码 |
|
|
56
|
+
| 4 | 重启前端 | — | 加载新页面 |
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 代码规范检查
|
|
61
|
+
|
|
62
|
+
| 检查项 | 状态 | 说明 |
|
|
63
|
+
|--------|:----:|------|
|
|
64
|
+
| Java 8 语法 | ✅ | 未使用 Java 9+ 特性 |
|
|
65
|
+
| Lombok 注解 | ✅ | @Data, @EqualsAndHashCode 等 |
|
|
66
|
+
| SLF4J 日志 | ✅ | @Slf4j,无 System.out |
|
|
67
|
+
| LambdaQueryWrapper | ✅ | 无字符串字段名 |
|
|
68
|
+
| ResponseWrapper | ✅ | 统一响应格式 |
|
|
69
|
+
| BaseModel 继承 | ✅ | 审计字段自动填充 |
|
|
70
|
+
| Vue 2 Options API | ✅ | 未使用 Composition API |
|
|
71
|
+
| View Design 4 组件 | ✅ | 统一 UI 库 |
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 下一步
|
|
76
|
+
|
|
77
|
+
1. 执行建表 SQL
|
|
78
|
+
2. 执行菜单注册 SQL
|
|
79
|
+
3. 重启后端服务
|
|
80
|
+
4. 重启前端开发服务
|
|
81
|
+
5. 验证功能
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# 范围确认记录
|
|
2
|
+
|
|
3
|
+
> 确认日期: <日期>
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 确认结果
|
|
8
|
+
|
|
9
|
+
| 维度 | 确认值 |
|
|
10
|
+
|------|--------|
|
|
11
|
+
| 项目根目录 | <绝对路径> |
|
|
12
|
+
| 实施范围 | <模块列表> |
|
|
13
|
+
| 后端 center | modules-center/{module}-center |
|
|
14
|
+
| 后端包路径 | com.twsz.mom.{module}.{sub} |
|
|
15
|
+
| 前端 API 目录 | src/api/{domain}/ |
|
|
16
|
+
| 前端页面目录 | src/views/{domain}/{entity}/ |
|
|
17
|
+
| 表名前缀 | {prefix}_ |
|
|
18
|
+
| 数据表空间 | MES_DATA_xxx |
|
|
19
|
+
| 索引表空间 | MES_IDX_xxx |
|
|
20
|
+
| 编号生成 | @AutoGenCode / 无 |
|
|
21
|
+
| 状态流转 | 有 / 无 |
|
|
22
|
+
| 已有代码影响 | <列表或无> |
|
|
23
|
+
| 索引策略 | <索引清单> |
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 对话记录
|
|
28
|
+
|
|
29
|
+
### Q0: 项目根目录
|
|
30
|
+
|
|
31
|
+
<对话内容>
|
|
32
|
+
|
|
33
|
+
### Q1: 实施范围
|
|
34
|
+
|
|
35
|
+
<对话内容>
|
|
36
|
+
|
|
37
|
+
### Q2: 后端模块归属
|
|
38
|
+
|
|
39
|
+
<对话内容>
|
|
40
|
+
|
|
41
|
+
### Q3: 后端包路径
|
|
42
|
+
|
|
43
|
+
<对话内容>
|
|
44
|
+
|
|
45
|
+
### Q4: 前端目录
|
|
46
|
+
|
|
47
|
+
<对话内容>
|
|
48
|
+
|
|
49
|
+
### Q5: 已有代码影响
|
|
50
|
+
|
|
51
|
+
<对话内容>
|
|
52
|
+
|
|
53
|
+
### Q6: 特殊技术决策
|
|
54
|
+
|
|
55
|
+
<对话内容>
|
|
56
|
+
|
|
57
|
+
### Q7: 表名前缀
|
|
58
|
+
|
|
59
|
+
<对话内容 — 确认表的模块前缀,如 pc_、wm_、pd_ 等>
|
|
60
|
+
|
|
61
|
+
### Q8: 表空间选择
|
|
62
|
+
|
|
63
|
+
<对话内容 — 根据业务模块确认数据表空间和索引表空间>
|
|
64
|
+
|
|
65
|
+
### Q9: 索引策略
|
|
66
|
+
|
|
67
|
+
<对话内容 — 确认每张表需要哪些索引,字段列表,索引类型>
|