@specpow/framework 0.5.21 → 0.5.23

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.
@@ -0,0 +1,94 @@
1
+ # MES CRUD 接口规范: {{Entity}}
2
+
3
+ > 模块: {{module}} | 实体: {{Entity}} | 表: {{table_name}}
4
+
5
+ ## ADDED Requirements
6
+
7
+ ### API-001: 分页查询
8
+ 系统应当提供 `POST /{{entity}}/search` 接口,接收 `PageForm<{{Entity}}>` 请求体,返回分页结果。
9
+
10
+ **验收标准:**
11
+ - **Given** 数据库中存在 {{Entity}} 记录
12
+ - **When** 用户请求 `POST /{{entity}}/search`,请求体为 `{ "size": 20, "current": 1, "condition": {} }`
13
+ - **Then** 返回 `ResponseWrapper<Page<{{Entity}}>>`,包含 records 数组和 total 总数
14
+
15
+ ### API-002: 详情查询
16
+ 系统应当提供 `GET /{{entity}}/get/{id}` 接口。
17
+
18
+ **验收标准:**
19
+ - **Given** 存在 ID 为 1 的记录
20
+ - **When** 用户请求 `GET /{{entity}}/get/1`
21
+ - **Then** 返回 `ResponseWrapper<{{Entity}}>`,data 为该记录详情
22
+
23
+ ### API-003: 新增
24
+ 系统应当提供 `POST /{{entity}}/add` 接口,接收实体 JSON。
25
+
26
+ **验收标准:**
27
+ - **Given** 用户提供必填字段,请求体为合法的 {{Entity}} JSON
28
+ - **When** 用户请求 `POST /{{entity}}/add`
29
+ - **Then** 创建记录(雪花 ID 自动生成,审计字段自动填充),返回 `ResponseWrapper<String>` 成功
30
+
31
+ ### API-004: 修改
32
+ 系统应当提供 `PUT /{{entity}}/update` 接口。
33
+
34
+ **验收标准:**
35
+ - **Given** 存在待修改的记录
36
+ - **When** 用户请求 `PUT /{{entity}}/update`,请求体包含 id 和修改字段
37
+ - **Then** 更新记录(last_updated_by/last_updated_date 自动更新),返回 `ResponseWrapper<String>` 成功
38
+
39
+ ### API-005: 批量删除
40
+ 系统应当提供 `DELETE /{{entity}}/delete` 接口,接收 ID 数组。
41
+
42
+ **验收标准:**
43
+ - **Given** 存在待删除的记录
44
+ - **When** 用户请求 `DELETE /{{entity}}/delete`,请求体为 `[1, 2, 3]`
45
+ - **Then** 删除指定记录,返回 `ResponseWrapper<String>` 成功
46
+
47
+ ### API-006: 不分页列表
48
+ 系统应当提供 `POST /{{entity}}/list` 接口。
49
+
50
+ **验收标准:**
51
+ - **Given** 数据库中存在匹配记录
52
+ - **When** 用户请求 `POST /{{entity}}/list`
53
+ - **Then** 返回 `ResponseWrapper<List<{{Entity}}>>`(限制最多 10000 条)
54
+
55
+ ### API-007: Excel 导出
56
+ 系统应当提供 `POST /{{entity}}/export` 接口。
57
+
58
+ **验收标准:**
59
+ - **Given** 存在可导出的记录
60
+ - **When** 用户请求 `POST /{{entity}}/export`
61
+ - **Then** 返回 Excel 文件流(EasyExcel),文件名包含模块名
62
+
63
+ ---
64
+
65
+ ## 前端接口规范
66
+
67
+ ### FE-001: API 接口文件
68
+ 系统应当在 `src/api/{{domain}}/{{entity}}.js` 中封装以下方法:
69
+ - `search{{Entity}}(data)` — POST /{{entity}}/search
70
+ - `save{{Entity}}(data)` — POST /{{entity}}/add 或 PUT /{{entity}}/update(根据是否有 id 判断)
71
+ - `delete{{Entity}}(ids)` — DELETE /{{entity}}/delete
72
+ - `list{{Entity}}(data)` — POST /{{entity}}/list
73
+ - `export{{Entity}}(data)` — POST /{{entity}}/export
74
+
75
+ **验收标准:**
76
+ - **Given** API 文件已创建
77
+ - **When** 前端页面调用 API 方法
78
+ - **Then** 正确发送 HTTP 请求并返回 Promise
79
+
80
+ ### FE-002: 列表页
81
+ 系统应当在 `src/views/{{domain}}/{{entity}}/index.vue` 中实现列表页。
82
+
83
+ **验收标准:**
84
+ - **Given** 用户有查看权限
85
+ - **When** 用户访问列表页
86
+ - **Then** 展示搜索条件表单 + 数据表格 + 分页,支持新增/编辑/查看/删除/导出操作
87
+
88
+ ### FE-003: 表单页
89
+ 系统应当在 `src/views/{{domain}}/{{entity}}/{{entity}}-form.vue` 中实现表单页。
90
+
91
+ **验收标准:**
92
+ - **Given** 用户点击新增或编辑按钮
93
+ - **When** 表单页展示
94
+ - **Then** 展示可编辑表单,必填字段有验证规则,提交后返回列表
@@ -0,0 +1,208 @@
1
+ # MES CRUD 任务列表: {{Entity}}
2
+
3
+ ## 全局约束
4
+
5
+ - 后端: `modules-center/{{module}}-center/{{module}}-service/`
6
+ - 前端: `implat-ui/src/`
7
+ - 数据库: Oracle
8
+ - 分支: `feature/{{entity}}-crud`
9
+
10
+ ---
11
+
12
+ ## 后端任务
13
+
14
+ ### Task-001: 建表 SQL(Oracle)
15
+
16
+ - 文件: `sql/{{table_name}}.sql`
17
+ - 依赖: 无
18
+ - 描述: 创建数据库表,字段与提案中的字段清单对应
19
+ - 代码模板:
20
+
21
+ ```sql
22
+ CREATE TABLE {{table_name}} (
23
+ id NUMBER(19) NOT NULL,
24
+ -- 业务字段(根据提案补充)
25
+ is_effect NUMBER(1) DEFAULT 1,
26
+ created_by VARCHAR2(64) DEFAULT '',
27
+ created_date TIMESTAMP DEFAULT SYSTIMESTAMP,
28
+ last_updated_by VARCHAR2(64) DEFAULT '',
29
+ last_updated_date TIMESTAMP DEFAULT SYSTIMESTAMP,
30
+ CONSTRAINT pk_{{table_name}} PRIMARY KEY (id)
31
+ );
32
+ COMMENT ON TABLE {{table_name}} IS '{{table_comment}}';
33
+ ```
34
+
35
+ - 验证: SQL 可在 Oracle 客户端执行
36
+
37
+ ### Task-002: 创建 Entity 实体类
38
+
39
+ - 文件: `modules-center/{{module}}-center/{{module}}-service/src/main/java/com/twsz/mom/{{module}}/model/{{Entity}}.java`
40
+ - 依赖: Task-001
41
+ - 描述: 继承 `BaseModel`,声明业务字段。审计字段(createdBy 等)和主键(id)由 BaseModel 自动提供。
42
+ - 代码模板:
43
+
44
+ ```java
45
+ package com.twsz.mom.{{module}}.model;
46
+
47
+ import com.baomidou.mybatisplus.annotation.TableName;
48
+ import com.fasterxml.jackson.annotation.JsonInclude;
49
+ import com.twsz.mom.common.ds.model.BaseModel;
50
+ import lombok.Data;
51
+ import lombok.EqualsAndHashCode;
52
+
53
+ @Data
54
+ @EqualsAndHashCode(callSuper = true)
55
+ @JsonInclude(JsonInclude.Include.NON_NULL)
56
+ @TableName("{{table_name}}")
57
+ public class {{Entity}} extends BaseModel {
58
+ // 业务字段(审计字段由 BaseModel → TimeModel 提供)
59
+ private Integer isEffect;
60
+ // ... 根据提案中的字段清单补充
61
+ }
62
+ ```
63
+
64
+ - 验证: 编译通过
65
+
66
+ ### Task-003: 创建 Mapper 接口 + XML
67
+
68
+ - 文件:
69
+ - `modules-center/{{module}}-center/{{module}}-service/src/main/java/com/twsz/mom/{{module}}/mapper/{{Entity}}Mapper.java`
70
+ - `modules-center/{{module}}-center/{{module}}-service/src/main/resources/mapper/{{Entity}}Mapper.xml`
71
+ - 依赖: Task-002
72
+ - 描述: 继承 `BaseMapper<{{Entity}}>`,XML 包含标准的 Columns/Where/Joins 片段
73
+ - 代码模板(Mapper 接口):
74
+
75
+ ```java
76
+ package com.twsz.mom.{{module}}.mapper;
77
+
78
+ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
79
+ import com.baomidou.mybatisplus.core.metadata.IPage;
80
+ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
81
+ import com.twsz.mom.{{module}}.model.{{Entity}};
82
+ import org.apache.ibatis.annotations.Mapper;
83
+ import org.apache.ibatis.annotations.Param;
84
+ import java.util.List;
85
+
86
+ @Mapper
87
+ public interface {{Entity}}Mapper extends BaseMapper<{{Entity}}> {
88
+ IPage<{{Entity}}> pageSearch(Page<{{Entity}}> page, @Param("entity") {{Entity}} entity);
89
+ List<{{Entity}}> list(@Param("entity") {{Entity}} entity);
90
+ }
91
+ ```
92
+
93
+ - 代码模板(XML): 参见 design.md 中的标准 XML 模板
94
+ - 验证: 编译通过,namespace 与 Mapper 接口全限定名匹配
95
+
96
+ ### Task-004: 创建 Service 接口 + 实现
97
+
98
+ - 文件:
99
+ - `modules-center/{{module}}-center/{{module}}-service/src/main/java/com/twsz/mom/{{module}}/service/{{Entity}}Service.java`
100
+ - `modules-center/{{module}}-center/{{module}}-service/src/main/java/com/twsz/mom/{{module}}/service/impl/{{Entity}}ServiceImpl.java`
101
+ - 依赖: Task-003
102
+ - 描述: 继承 `IService<{{Entity}}>` / `ServiceImpl<Mapper, Entity>`,实现标准 CRUD 方法
103
+ - 代码模板: 参见 design.md 中的 Service 模板
104
+ - 验证: 编译通过
105
+
106
+ ### Task-005: 创建 Controller
107
+
108
+ - 文件: `modules-center/{{module}}-center/{{module}}-service/src/main/java/com/twsz/mom/{{module}}/controller/{{Entity}}Controller.java`
109
+ - 依赖: Task-004
110
+ - 描述: `@RestController`,`@RequestMapping("/{{entity}}")`,返回 `ResponseWrapper<T>`
111
+ - 代码模板: 参见 design.md 中的 Controller 模板
112
+ - 验证: 编译通过,启动后可访问接口
113
+
114
+ ---
115
+
116
+ ## 前端任务
117
+
118
+ ### Task-006: 创建 API 接口文件
119
+
120
+ - 文件: `implat-ui/src/api/{{domain}}/{{entity}}.js`
121
+ - 依赖: Task-005
122
+ - 描述: 封装 search/save/delete/list/export 五个标准方法
123
+ - 代码模板:
124
+
125
+ ```js
126
+ import axios from '@/libs/request'
127
+ import { exportExcel } from '../file'
128
+
129
+ const apiPrefix = '/{{entity}}'
130
+
131
+ const search{{Entity}} = data =>
132
+ axios.request({ url: `${apiPrefix}/search`, method: 'POST', data })
133
+
134
+ const save{{Entity}} = data => {
135
+ const url = data.id ? `${apiPrefix}/update` : `${apiPrefix}/add`
136
+ const method = data.id ? 'PUT' : 'POST'
137
+ return axios.request({ url, method, data })
138
+ }
139
+
140
+ const delete{{Entity}} = ids =>
141
+ axios.request({ url: `${apiPrefix}/delete`, method: 'DELETE', data: Array.isArray(ids) ? ids : [ids] })
142
+
143
+ const list{{Entity}} = data =>
144
+ axios.request({ url: `${apiPrefix}/list`, method: 'POST', data })
145
+
146
+ const export{{Entity}} = data =>
147
+ exportExcel(`${apiPrefix}/export`, data)
148
+
149
+ export default { search{{Entity}}, save{{Entity}}, delete{{Entity}}, list{{Entity}}, export{{Entity}} }
150
+ ```
151
+
152
+ - 验证: 无语法错误
153
+
154
+ ### Task-007: 创建列表页
155
+
156
+ - 文件: `implat-ui/src/views/{{domain}}/{{entity}}/index.vue`
157
+ - 依赖: Task-006
158
+ - 描述: 使用 `indexPage` mixin + `<search-table>` 组件,配置 option 对象和 tableColumns
159
+ - 代码模板: 参见 design.md 中的列表页模板
160
+ - 关键约定:
161
+ - `mixins: [indexPage]` — 提供 showIndexPage/add/edit/view/refresh/triggerBack
162
+ - `option.search.query` — 绑定 API search 方法
163
+ - `option.delete.method` — 绑定 API delete 方法
164
+ - `$t('key||中文')` — i18n 格式
165
+ - 验证: 页面可渲染,表格可加载数据
166
+
167
+ ### Task-008: 创建表单页
168
+
169
+ - 文件: `implat-ui/src/views/{{domain}}/{{entity}}/{{entity}}-form.vue`
170
+ - 依赖: Task-006
171
+ - 描述: 使用 `<master-sub>` 组件 + `BaseMixin`,实现新增/编辑表单
172
+ - 代码模板: 参见 design.md 中的表单页模板
173
+ - 关键约定:
174
+ - `mixins: [BaseMixin]` — 提供 loading/asyncLoading
175
+ - `this.$refs.mform.validate()` — 表单验证
176
+ - `this.$emit('on-success', data)` — 提交成功回调
177
+ - `class="form"` — 自动两列布局
178
+ - 验证: 表单验证生效,提交成功返回列表
179
+
180
+ ### Task-009: 菜单注册
181
+
182
+ - 文件: `sql/menu_{{entity}}.sql`
183
+ - 依赖: Task-008
184
+ - 描述: 向 `c_sys_resource` 表插入菜单和按钮权限记录
185
+ - 代码模板: 参见 menu-register.md
186
+ - 权限标识:
187
+ - `{{module}}:{{entity}}:view` — 查看
188
+ - `{{module}}:{{entity}}:add` — 新增
189
+ - `{{module}}:{{entity}}:edit` — 修改
190
+ - `{{module}}:{{entity}}:delete` — 删除
191
+ - `{{module}}:{{entity}}:export` — 导出
192
+ - 验证: 执行 SQL 后刷新缓存,菜单可见
193
+
194
+ ---
195
+
196
+ ## 任务依赖图
197
+
198
+ ```
199
+ Task-001 (建表)
200
+ └─ Task-002 (Entity)
201
+ └─ Task-003 (Mapper + XML)
202
+ └─ Task-004 (Service)
203
+ └─ Task-005 (Controller)
204
+ └─ Task-006 (API 接口)
205
+ ├─ Task-007 (列表页)
206
+ └─ Task-008 (表单页)
207
+ └─ Task-009 (菜单注册)
208
+ ```
@@ -0,0 +1,365 @@
1
+ # MES PRD to Code Schema
2
+ # 功能文档 → 技术文档 → 完整代码
3
+ # 工件流: parse → confirm-scope → tech-design → tasks → 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
+ ## 确认结果记录
151
+ 将所有确认结果写入 confirm-scope 记录中,作为技术文档的输入。
152
+ 格式:
153
+ ```
154
+ ## 确认结果
155
+ - 实施范围: [模块列表]
156
+ - 后端 center: xxx
157
+ - 后端包路径: com.twsz.mom.xxx
158
+ - 前端 API 目录: src/api/xxx/
159
+ - 前端页面目录: src/views/xxx/
160
+ - 编号生成: @AutoGenCode / 无
161
+ - 状态流转: 有(审核/弃审) / 无
162
+ - 已有代码影响: [列表]
163
+ ```
164
+
165
+ - id: tech-design
166
+ name: 技术设计文档
167
+ description: 基于确认结果生成完整技术设计文档
168
+ requires: [parse, confirm-scope]
169
+ template: tech-design.md
170
+ instruction: |
171
+ 基于解析报告和确认结果,生成完整的技术设计文档。
172
+
173
+ ## 文档结构
174
+
175
+ ### 1. 数据库设计
176
+ - 将功能文档的 DDL 适配为 Oracle 语法
177
+ - 适配规则:
178
+ - INT/BIGINT AUTO_INCREMENT → NUMBER(19) 雪花算法
179
+ - VARCHAR(n) → VARCHAR2(n)
180
+ - DATETIME → DATE
181
+ - CURRENT_TIMESTAMP → SYSDATE
182
+ - 审计字段统一为: created_by, created_date, last_updated_by, last_updated_date
183
+ - 去除 is_deleted 逻辑删除字段(MES 使用物理删除)
184
+ - 包含完整 DDL + 索引 + 注释
185
+ - 标注建表方式: dbx MCP(优先)/ SQL 脚本
186
+
187
+ ### 2. API 接口设计
188
+ - 标准 CRUD 接口(根据功能文档的按钮/操作推导):
189
+ - POST /{entity}/search — 分页查询
190
+ - POST /{entity}/add — 新增
191
+ - PUT /{entity}/update — 修改
192
+ - DELETE /{entity}/delete — 批量删除
193
+ - POST /{entity}/export — 导出
194
+ - POST /{entity}/uploadExcel — 导入(如有)
195
+ - 外部接口(如功能文档有定义):
196
+ - 按功能文档定义的路径和方法
197
+ - 请求/响应格式按功能文档
198
+ - 每个接口给出:
199
+ - 请求示例 JSON
200
+ - 响应示例 JSON
201
+ - 错误码
202
+
203
+ ### 3. 后端代码结构
204
+ 对每个 Entity 给出:
205
+
206
+ #### Entity(完整代码模板)
207
+ - 继承 BaseModel
208
+ - @TableName, @Data, @EqualsAndHashCode(callSuper=false)
209
+ - @TableId(type=IdType.ASSIGN_ID) + @JsonSerialize(ToStringSerializer)
210
+ - @AutoGenCode(如有编号字段)
211
+ - @ExcelProperty(每个业务字段)
212
+ - 给出完整 Java 代码
213
+
214
+ #### Mapper(完整代码模板)
215
+ - 接口继承 BaseMapper<T>
216
+ - 方法: pageSearch + list
217
+ - XML: Columns/Where 片段 + 查询语句
218
+ - 给出完整代码
219
+
220
+ #### Service(方法签名 + 关键逻辑)
221
+ - 接口方法签名
222
+ - 关键业务逻辑用伪代码描述:
223
+ - 校验规则
224
+ - 唯一性检查
225
+ - 事务控制
226
+ - 导入逻辑
227
+ - 不要求完整实现代码
228
+
229
+ #### Controller(完整代码模板)
230
+ - @RestController + @RequestMapping
231
+ - 每个方法的签名和参数
232
+ - 给出完整代码
233
+
234
+ ### 4. 前端代码结构
235
+ 对每个页面给出:
236
+
237
+ #### API 文件
238
+ - 完整 JS 代码(import + 各方法)
239
+
240
+ #### 列表页(配置描述)
241
+ - 搜索条件字段
242
+ - 表格列定义(列名、key、slot)
243
+ - 工具栏按钮
244
+ - 组件: search-table + indexPage mixin
245
+
246
+ #### 表单页(配置描述)
247
+ - 表单字段列表(控件类型、必填、校验规则)
248
+ - 组件: master-sub + Form
249
+ - 提交逻辑
250
+
251
+ ### 5. 业务逻辑流程
252
+ - 用 ASCII 流程图描述核心业务操作
253
+ - 标注校验点和异常处理
254
+ - 如有状态流转,画出状态机
255
+
256
+ ### 6. 集成点 + 菜单权限
257
+ - 被其他模块调用的方式
258
+ - 菜单注册 SQL(c_sys_resource)
259
+
260
+ ## 对话 2: 实现确认
261
+ 生成技术文档初稿后,以苏格拉底式对话确认:
262
+ - 表名和字段名是否确认?
263
+ - API 路径是否正确?
264
+ - 前端组件选型是否符合预期?
265
+ - 特殊校验规则是否完整?
266
+ - 用户确认后更新技术文档
267
+
268
+ ## 输出
269
+ 最终版 tech-design.md
270
+
271
+ output: tech-design.md
272
+
273
+ - id: tasks
274
+ name: 实施任务清单
275
+ description: 基于技术文档拆分实施任务,每个任务含完整代码
276
+ requires: [tech-design]
277
+ template: tasks.md
278
+ instruction: |
279
+ 基于技术设计文档,拆分为可执行的实施任务列表。
280
+
281
+ ## 任务拆分原则
282
+ 1. 每个任务足够小(2-5 分钟完成)
283
+ 2. 包含精确的文件路径(匹配 MES 项目包结构)
284
+ 3. 包含完整的代码(从技术文档的模板中提取)
285
+ 4. 包含验证步骤
286
+ 5. 任务之间尽量独立
287
+
288
+ ## 任务顺序
289
+ 按以下顺序排列:
290
+
291
+ ### 数据库任务
292
+ 1. 建表 DDL(标注 dbx MCP 或 SQL 脚本)
293
+
294
+ ### 后端任务(每个 Entity 一组)
295
+ 2. Entity 实体类(完整代码)
296
+ 3. Mapper 接口(完整代码)
297
+ 4. Mapper XML(完整代码)
298
+ 5. Service 接口(完整代码)
299
+ 6. ServiceImpl 实现(完整代码,含业务逻辑)
300
+ 7. Controller(完整代码)
301
+
302
+ ### 前端任务(每个页面一组)
303
+ 8. API 文件(完整代码)
304
+ 9. 列表页 index.vue(完整代码)
305
+ 10. 表单页 form.vue(完整代码)
306
+
307
+ ### 配置任务
308
+ 11. 菜单注册 SQL
309
+
310
+ ### 如有外部接口
311
+ 12. 外部接口 Controller(独立路径)
312
+ 13. 外部接口 Service 逻辑
313
+
314
+ ## 任务格式
315
+ ```
316
+ - [ ] Task-NNN: <标题>
317
+ 文件: <精确路径>
318
+ 描述: <具体实现指令>
319
+ 代码:
320
+ ```java/vue/js/sql
321
+ <完整代码>
322
+ ```
323
+ 验证: <验证步骤>
324
+ 依赖: Task-XXX
325
+ ```
326
+
327
+ ## 任务依赖图
328
+ 用 ASCII 图展示任务依赖关系
329
+
330
+ output: tasks.md
331
+
332
+ - id: code
333
+ name: 代码生成
334
+ description: 按任务清单生成完整代码文件
335
+ requires: [tasks]
336
+ template: code-generation.md
337
+ instruction: |
338
+ 按任务清单逐个生成代码文件。
339
+
340
+ ## 执行方式
341
+ 1. 按任务依赖顺序执行
342
+ 2. 每个任务:
343
+ a. 从 tasks.md 中取出代码
344
+ b. 写入精确的文件路径
345
+ c. 验证文件创建成功
346
+ 3. 数据库任务:通过 dbx MCP 或输出 SQL 脚本
347
+
348
+ ## 代码规范检查
349
+ 生成的代码必须符合以下 MES 规范:
350
+ - Java 8 语法,不使用 Java 9+ 特性
351
+ - Lombok 注解(@Data, @Builder 等)
352
+ - SLF4J 日志(@Slf4j),不用 System.out.println
353
+ - LambdaQueryWrapper,不用字符串字段名
354
+ - ResponseWrapper<T> 统一响应
355
+ - BaseModel 继承
356
+ - Vue 2 Options API
357
+ - View Design 4 组件
358
+ - indexPage mixin / master-sub 组件
359
+
360
+ ## 输出
361
+ - 所有代码文件已写入磁盘
362
+ - 生成文件清单
363
+ - 标注需要用户手动执行的操作(如建表 SQL、菜单注册 SQL)
364
+
365
+ output: code-generation.md