@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,158 @@
1
+ # MES CRUD Module Schema
2
+ # 基于 MES 项目(mom-master + implat-ui)真实代码模式定制
3
+ # 工件流: proposal → specs → design → tasks → api-docs → menu-register → apply
4
+
5
+ name: mes-crud-module
6
+ description: |
7
+ MES 系统专属 CRUD 模块生成器。
8
+ 基于 mom-master(Spring Boot + MyBatis-Plus + Oracle)后端
9
+ 和 implat-ui(Vue2 + ViewUI + VXETable)前端的真实代码模式。
10
+ 生成的代码直接匹配项目约定,无需二次适配。
11
+
12
+ apply:
13
+ requires:
14
+ - tasks # 实施前必须完成所有工件
15
+
16
+ artifacts:
17
+ - id: proposal
18
+ name: 模块提案
19
+ description: 描述要生成的 CRUD 模块(实体、字段、业务规则)
20
+ requires: []
21
+ template: proposal.md
22
+ instruction: |
23
+ 根据用户描述,生成 MES CRUD 模块提案。
24
+ 包含:模块名称、所属业务中心(modules-center)、核心实体、表名、
25
+ CRUD 操作列表、字段清单、业务规则。
26
+
27
+ 注意 MES 项目约定:
28
+ - 后端位于 modules-center/{module}-center/
29
+ - 包名: com.twsz.mom.{module}
30
+ - 实体继承 BaseModel(雪花 ID + 审计字段自动填充)
31
+ - 表名使用下划线命名,可选模块前缀
32
+ - 状态字段统一用 is_effect (1=启用, 0=停用)
33
+ output: proposal.md
34
+
35
+ - id: specs
36
+ name: 接口规范
37
+ description: 定义 MES 标准 CRUD 接口行为契约
38
+ requires: [proposal]
39
+ template: spec.md
40
+ instruction: |
41
+ 创建 MES 标准 CRUD 接口规范。使用 Delta Spec 格式。
42
+
43
+ MES 项目接口约定(必须遵守):
44
+ - POST /{entity}/search — 分页查询(请求体: PageForm<{Entity}>)
45
+ - POST /{entity}/add — 新增(请求体: Entity)
46
+ - PUT /{entity}/update — 修改(请求体: Entity)
47
+ - DELETE /{entity}/delete — 批量删除(请求体: Long[] ids)
48
+ - GET /{entity}/get/{id} — 详情查询
49
+ - POST /{entity}/list — 不分页列表(请求体: Entity)
50
+ - POST /{entity}/export — Excel 导出(EasyExcel)
51
+
52
+ 响应统一使用 ResponseWrapper<T>。
53
+ 分页使用 PageForm<T>(size + current + condition)。
54
+
55
+ 前端接口约定:
56
+ - API 文件位于 src/api/{domain}/{entity}.js
57
+ - 使用 import axios from '@/libs/request'
58
+ - search 发送 { size, current, condition } 接收 { records, total }
59
+ - delete 传 ID 数组(支持批量)
60
+
61
+ 规范是行为契约,描述系统做什么,不描述怎么做。
62
+ 每个需求必须可验证(Given/When/Then)。
63
+ output: specs/{{entity}}/spec.md
64
+
65
+ - id: design
66
+ name: 模块设计
67
+ description: 数据库表设计 + 前后端代码结构 + 接口定义
68
+ requires: [proposal, specs]
69
+ template: design.md
70
+ instruction: |
71
+ 创建 MES CRUD 模块设计文档。包含:
72
+
73
+ 1. 数据库设计(Oracle)
74
+ - 表结构(遵循 BaseModel 审计字段约定)
75
+ - 主键: id NUMBER(19) 雪花算法
76
+ - 审计字段: created_by, created_date, last_updated_by, last_updated_date
77
+ - 状态字段: is_effect NUMBER(1) DEFAULT 1
78
+
79
+ 2. 后端代码结构
80
+ - Entity: 继承 BaseModel,@TableName,@Data
81
+ - Mapper: 继承 BaseMapper<T>,XML 含 Columns/Where/Joins 片段
82
+ - Service: 继承 IService<T>
83
+ - ServiceImpl: 继承 ServiceImpl<Mapper, Entity>
84
+ - Controller: @RestController,返回 ResponseWrapper<T>
85
+
86
+ 3. 前端代码结构
87
+ - API: src/api/{domain}/{entity}.js
88
+ - 列表页: src/views/{domain}/{entity}/index.vue(indexPage mixin + search-table)
89
+ - 表单页: src/views/{domain}/{entity}/{entity}-form.vue(master-sub + BaseMixin)
90
+
91
+ 4. 接口定义表
92
+
93
+ 如果变更较小(< 3 个文件),可以跳过此工件。
94
+ output: design.md
95
+ conditional: true
96
+
97
+ - id: tasks
98
+ name: 任务列表
99
+ description: 按 MES 项目约定拆分的实现任务(SDD 引擎逐个执行)
100
+ requires: [proposal, specs, design]
101
+ template: tasks.md
102
+ instruction: |
103
+ 创建 MES CRUD 模块实现任务列表。每个任务应:
104
+ 1. 包含精确的文件路径(匹配项目包结构)
105
+ 2. 包含完整的代码模板或明确的修改指令
106
+ 3. 包含验证步骤
107
+ 4. 任务之间尽量独立(便于 SDD 并行)
108
+
109
+ MES 后端任务顺序:
110
+ 1. 建表 SQL(Oracle 语法)
111
+ 2. Entity 实体类(继承 BaseModel)
112
+ 3. Mapper 接口 + XML(含 Columns/Where/Joins 片段)
113
+ 4. Service 接口 + 实现
114
+ 5. Controller
115
+
116
+ MES 前端任务顺序:
117
+ 6. API 接口文件
118
+ 7. 列表页(index.vue + indexPage mixin)
119
+ 8. 表单页({entity}-form.vue + master-sub)
120
+ 9. 菜单注册(c_sys_resource SQL)
121
+
122
+ 格式:
123
+ - [ ] Task N: <标题>
124
+ <详细描述,包含精确文件路径和代码>
125
+ 验证: <如何验证>
126
+ output: tasks.md
127
+
128
+ - id: api-docs
129
+ name: API 接口文档
130
+ description: MES 标准 RESTful 接口文档(含请求/响应示例)
131
+ requires: [design]
132
+ template: api-docs.md
133
+ instruction: |
134
+ 生成 MES 标准 API 接口文档:
135
+ - 接口概览表
136
+ - 每个接口的请求参数和响应示例(JSON 格式)
137
+ - 使用 ResponseWrapper 包装格式
138
+ - PageForm 分页请求格式
139
+ - 通用错误码说明(使用 HttpStatus 枚举)
140
+ output: api-docs.md
141
+
142
+ - id: menu-register
143
+ name: 菜单注册
144
+ description: c_sys_resource 表菜单 + 按钮权限注册 SQL
145
+ requires: [tasks]
146
+ template: menu-register.md
147
+ instruction: |
148
+ 生成 MES 菜单注册配置:
149
+ - c_sys_resource 表 INSERT 语句(菜单 + 按钮权限)
150
+ - 前端路由配置参考
151
+ - 权限标识约定: {module}:{entity}:{action}
152
+
153
+ MES 菜单注册约定:
154
+ - type=1 路由菜单, type=2 按钮权限, type=3 API 资源
155
+ - component 字段为 Vue 组件路径(如 "pm/entity/index")
156
+ - permission 字段为权限标识(如 "pm:entity:add")
157
+ - 路由由后端动态返回,前端通过 addRoutes 注册
158
+ output: menu-register.md
@@ -0,0 +1,238 @@
1
+ # MES API 接口文档: {{Entity}}
2
+
3
+ > 模块: {{module}} | 实体: {{Entity}} | 基础路径: `/{{entity}}`
4
+ > 响应格式: `ResponseWrapper<T>` | 分页格式: `PageForm<T>`
5
+
6
+ ---
7
+
8
+ ## 接口概览
9
+
10
+ | Method | Path | 描述 | 认证 |
11
+ |--------|------|------|------|
12
+ | POST | `/{{entity}}/search` | 分页查询 | 需要 |
13
+ | GET | `/{{entity}}/get/{id}` | 详情查询 | 需要 |
14
+ | POST | `/{{entity}}/add` | 新增 | 需要 |
15
+ | PUT | `/{{entity}}/update` | 修改 | 需要 |
16
+ | DELETE | `/{{entity}}/delete` | 批量删除 | 需要 |
17
+ | POST | `/{{entity}}/list` | 不分页列表 | 需要 |
18
+ | POST | `/{{entity}}/export` | Excel 导出 | 需要 |
19
+
20
+ ---
21
+
22
+ ## 1. 分页查询
23
+
24
+ **请求**: `POST /{{entity}}/search`
25
+
26
+ **请求体** (`PageForm<{{Entity}}>`):
27
+ ```json
28
+ {
29
+ "size": 20,
30
+ "current": 1,
31
+ "condition": {
32
+ "isEffect": 1
33
+ }
34
+ }
35
+ ```
36
+
37
+ | 参数 | 类型 | 必填 | 说明 |
38
+ |------|------|------|------|
39
+ | size | number | 否 | 每页条数,默认 20 |
40
+ | current | number | 否 | 页码,默认 1 |
41
+ | condition | object | 否 | 查询条件(实体字段) |
42
+
43
+ **响应示例**:
44
+ ```json
45
+ {
46
+ "code": 200,
47
+ "message": "操作成功",
48
+ "data": {
49
+ "records": [
50
+ {
51
+ "id": "1234567890123456789",
52
+ "isEffect": 1,
53
+ "createdBy": "admin",
54
+ "createdDate": "2025/01/01 00:00:00",
55
+ "lastUpdatedBy": "admin",
56
+ "lastUpdatedDate": "2025/01/01 00:00:00"
57
+ }
58
+ ],
59
+ "total": 100,
60
+ "size": 20,
61
+ "current": 1
62
+ }
63
+ }
64
+ ```
65
+
66
+ > **注意**: id 为 Long 类型,序列化为字符串(`@JsonSerialize(using = ToStringSerializer.class)`)避免 JS 精度丢失。
67
+
68
+ ---
69
+
70
+ ## 2. 详情查询
71
+
72
+ **请求**: `GET /{{entity}}/get/{id}`
73
+
74
+ | 参数 | 类型 | 必填 | 说明 |
75
+ |------|------|------|------|
76
+ | id | number | 是 | 记录 ID(路径参数) |
77
+
78
+ **响应示例**:
79
+ ```json
80
+ {
81
+ "code": 200,
82
+ "message": "操作成功",
83
+ "data": {
84
+ "id": "1234567890123456789",
85
+ "isEffect": 1,
86
+ "createdBy": "admin",
87
+ "createdDate": "2025/01/01 00:00:00",
88
+ "lastUpdatedBy": "admin",
89
+ "lastUpdatedDate": "2025/01/01 00:00:00"
90
+ }
91
+ }
92
+ ```
93
+
94
+ ---
95
+
96
+ ## 3. 新增
97
+
98
+ **请求**: `POST /{{entity}}/add`
99
+
100
+ **请求体**:
101
+ ```json
102
+ {
103
+ "isEffect": 1
104
+ }
105
+ ```
106
+
107
+ > id、createdBy、createdDate、lastUpdatedBy、lastUpdatedDate 由系统自动填充,无需传入。
108
+
109
+ **响应示例**:
110
+ ```json
111
+ {
112
+ "code": 200,
113
+ "message": "操作成功",
114
+ "data": null
115
+ }
116
+ ```
117
+
118
+ ---
119
+
120
+ ## 4. 修改
121
+
122
+ **请求**: `PUT /{{entity}}/update`
123
+
124
+ **请求体**:
125
+ ```json
126
+ {
127
+ "id": "1234567890123456789",
128
+ "isEffect": 1
129
+ }
130
+ ```
131
+
132
+ > lastUpdatedBy、lastUpdatedDate 由系统自动更新。
133
+
134
+ **响应示例**:
135
+ ```json
136
+ {
137
+ "code": 200,
138
+ "message": "操作成功",
139
+ "data": null
140
+ }
141
+ ```
142
+
143
+ ---
144
+
145
+ ## 5. 批量删除
146
+
147
+ **请求**: `DELETE /{{entity}}/delete`
148
+
149
+ **请求体**:
150
+ ```json
151
+ [1, 2, 3]
152
+ ```
153
+
154
+ | 参数 | 类型 | 必填 | 说明 |
155
+ |------|------|------|------|
156
+ | body | Long[] | 是 | 待删除记录 ID 数组 |
157
+
158
+ **响应示例**:
159
+ ```json
160
+ {
161
+ "code": 200,
162
+ "message": "操作成功",
163
+ "data": null
164
+ }
165
+ ```
166
+
167
+ ---
168
+
169
+ ## 6. 不分页列表
170
+
171
+ **请求**: `POST /{{entity}}/list`
172
+
173
+ **请求体**:
174
+ ```json
175
+ {
176
+ "isEffect": 1
177
+ }
178
+ ```
179
+
180
+ **响应示例**:
181
+ ```json
182
+ {
183
+ "code": 200,
184
+ "message": "操作成功",
185
+ "data": [
186
+ { "id": "1234567890123456789", "isEffect": 1 }
187
+ ]
188
+ }
189
+ ```
190
+
191
+ > 默认限制最多返回 10000 条(可通过 entity.rowNum 覆盖)。
192
+
193
+ ---
194
+
195
+ ## 7. Excel 导出
196
+
197
+ **请求**: `POST /{{entity}}/export`
198
+
199
+ **请求体**: 同查询条件(实体字段)
200
+
201
+ **响应**: Excel 文件流(`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`)
202
+
203
+ ---
204
+
205
+ ## 通用错误码(HttpStatus 枚举)
206
+
207
+ | 错误码 | 常量名 | 说明 |
208
+ |--------|--------|------|
209
+ | 200 | SUCCESS | 操作成功 |
210
+ | 600 | ERROR | 系统错误 |
211
+ | 601 | UNAUTHORIZED | 未认证 |
212
+ | 608 | PARAM_NULL | 参数为空 |
213
+ | 620 | OBJECT_EXIST | 对象已存在 |
214
+ | 621 | OBJECT_INSERT_FAIL | 新增失败 |
215
+ | 622 | OBJECT_UPDATE_FAIL | 修改失败 |
216
+ | 623 | OBJECT_DELETE_FAIL | 删除失败 |
217
+ | 634 | OBJECT_NOT_EXIST | 对象不存在 |
218
+
219
+ **错误响应格式**:
220
+ ```json
221
+ {
222
+ "code": 621,
223
+ "message": "新增失败",
224
+ "data": null
225
+ }
226
+ ```
227
+
228
+ ---
229
+
230
+ ## ResponseWrapper 结构
231
+
232
+ ```java
233
+ {
234
+ "code": 200, // int — HttpStatus 枚举值
235
+ "message": "操作成功", // String — 提示信息
236
+ "data": T // 泛型 — 业务数据
237
+ }
238
+ ```