@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,168 @@
|
|
|
1
|
+
# 功能文档解析报告: <功能名称>
|
|
2
|
+
|
|
3
|
+
> 输入文件:
|
|
4
|
+
> - 功能文档: <*.md 文件路径>
|
|
5
|
+
> - 流程图: <*.drawio 文件路径>(如有)
|
|
6
|
+
> - 原型: <*.html 文件路径>(如有)
|
|
7
|
+
> 解析日期: <日期>
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. 子模块清单
|
|
12
|
+
|
|
13
|
+
| 编号 | 模块名称 | 类型 | 新建/修改 | 简述 |
|
|
14
|
+
|:----:|----------|------|:---------:|------|
|
|
15
|
+
| M-01 | | 新建CRUD / 修改已有 / 外部接口 / 记录表 | 新建 / 修改 | |
|
|
16
|
+
| M-02 | | | | |
|
|
17
|
+
|
|
18
|
+
> 如仅一个模块,此表只有一行。
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 2. 各模块解析详情
|
|
23
|
+
|
|
24
|
+
### M-01: <模块名称>
|
|
25
|
+
|
|
26
|
+
#### 2.1 功能简介
|
|
27
|
+
|
|
28
|
+
| 项目 | 值 |
|
|
29
|
+
|------|-----|
|
|
30
|
+
| 菜单路径 | |
|
|
31
|
+
| 应用设备 | |
|
|
32
|
+
| 使用人员 | |
|
|
33
|
+
| 功能描述 | |
|
|
34
|
+
|
|
35
|
+
#### 2.2 数据表
|
|
36
|
+
|
|
37
|
+
##### 表: <table_name>
|
|
38
|
+
|
|
39
|
+
| 字段名 | 中文名 | 原始类型 | 长度 | 主键 | 非空 | 默认值 | 说明 | Java 类型 | 适配说明 |
|
|
40
|
+
|--------|--------|----------|------|:----:|:----:|--------|------|-----------|----------|
|
|
41
|
+
| id | 主键 | BIGINT | - | ✅ | ✅ | - | | Long | → NUMBER(19) 雪花算法 |
|
|
42
|
+
| | | | | | | | | | |
|
|
43
|
+
|
|
44
|
+
**适配变更**(功能文档 DDL → MES Oracle 规范):
|
|
45
|
+
- <列出所有需要适配的项>
|
|
46
|
+
|
|
47
|
+
**审计字段**(自动补充):
|
|
48
|
+
- created_by VARCHAR2(64)
|
|
49
|
+
- created_date DATE DEFAULT SYSDATE
|
|
50
|
+
- last_updated_by VARCHAR2(64)
|
|
51
|
+
- last_updated_date DATE DEFAULT SYSDATE
|
|
52
|
+
|
|
53
|
+
##### 子表: <detail_table_name>(如有)
|
|
54
|
+
|
|
55
|
+
| 字段名 | 中文名 | 原始类型 | 长度 | 主键 | 非空 | 说明 | Java 类型 |
|
|
56
|
+
|--------|--------|----------|------|:----:|:----:|------|-----------|
|
|
57
|
+
| | | | | | | | |
|
|
58
|
+
|
|
59
|
+
**外键字段**: <关联主表的字段>
|
|
60
|
+
|
|
61
|
+
#### 2.3 操作/按钮
|
|
62
|
+
|
|
63
|
+
| 按钮 | 类型 | 对应接口 | 说明 |
|
|
64
|
+
|------|------|----------|------|
|
|
65
|
+
| 新增 | CRUD | POST /add | |
|
|
66
|
+
| 编辑 | CRUD | PUT /update | |
|
|
67
|
+
| 查看 | CRUD | GET /get/{id} | |
|
|
68
|
+
| 删除 | CRUD | DELETE /delete | |
|
|
69
|
+
| 导入 | 导入 | POST /uploadExcel | 模板: xxx |
|
|
70
|
+
| 导出 | 导出 | POST /export | |
|
|
71
|
+
|
|
72
|
+
#### 2.4 业务逻辑
|
|
73
|
+
|
|
74
|
+
##### 校验规则
|
|
75
|
+
|
|
76
|
+
| 编号 | 校验项 | 规则 | 错误提示 |
|
|
77
|
+
|:----:|--------|------|----------|
|
|
78
|
+
| V-01 | | | |
|
|
79
|
+
|
|
80
|
+
##### 特殊逻辑
|
|
81
|
+
|
|
82
|
+
1. <逻辑描述>
|
|
83
|
+
2. <逻辑描述>
|
|
84
|
+
|
|
85
|
+
##### 导入逻辑(如有)
|
|
86
|
+
|
|
87
|
+
- 模板格式: <描述>
|
|
88
|
+
- 校验规则: <列出>
|
|
89
|
+
- 事务控制: 整批回滚 / 逐行处理
|
|
90
|
+
|
|
91
|
+
##### 状态流转(如有)
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
<状态机 ASCII 图>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
#### 2.5 外部接口(如有)
|
|
98
|
+
|
|
99
|
+
| 接口名 | 方法 | 路径 | 调用方 | 描述 |
|
|
100
|
+
|--------|------|------|--------|------|
|
|
101
|
+
| | | | | |
|
|
102
|
+
|
|
103
|
+
##### 接口详情
|
|
104
|
+
|
|
105
|
+
**<接口名>**
|
|
106
|
+
|
|
107
|
+
请求:
|
|
108
|
+
```json
|
|
109
|
+
{}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
响应:
|
|
113
|
+
```json
|
|
114
|
+
{}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
业务逻辑:
|
|
118
|
+
1. <步骤>
|
|
119
|
+
|
|
120
|
+
#### 2.6 流程图摘要
|
|
121
|
+
|
|
122
|
+
从 *.drawio 提取的关键流程:
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
<ASCII 流程图>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
<!-- 重复以上结构,为每个子模块 M-02, M-03... 生成 -->
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## 3. 依赖关系图
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
M-01 (新建CRUD)
|
|
138
|
+
│
|
|
139
|
+
├──→ M-02 (修改已有,依赖 M-01 的数据)
|
|
140
|
+
│
|
|
141
|
+
└──→ M-03 (外部接口,读取 M-01 + M-02 的数据)
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
| 依赖 | 源模块 | 目标模块 | 类型 | 说明 |
|
|
145
|
+
|------|--------|----------|------|------|
|
|
146
|
+
| D-01 | M-01 | M-02 | 数据依赖 | M-02 读取 M-01 的表 |
|
|
147
|
+
| D-02 | M-01 | M-03 | 功能依赖 | M-03 调用 M-01 的 Service |
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## 4. 疑问点
|
|
152
|
+
|
|
153
|
+
| 编号 | 类型 | 描述 | 建议 |
|
|
154
|
+
|:----:|------|------|------|
|
|
155
|
+
| Q-01 | 字段疑问 / 逻辑疑问 / 依赖疑问 | | |
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 5. 统计
|
|
160
|
+
|
|
161
|
+
| 维度 | 数量 |
|
|
162
|
+
|------|:----:|
|
|
163
|
+
| 子模块数 | |
|
|
164
|
+
| 新建表数 | |
|
|
165
|
+
| 修改表数 | |
|
|
166
|
+
| API 接口数 | |
|
|
167
|
+
| 外部接口数 | |
|
|
168
|
+
| 校验规则数 | |
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# 实施任务: <功能名称>
|
|
2
|
+
|
|
3
|
+
> 输入: 技术设计文档 (tech-design.md)
|
|
4
|
+
> 创建日期: <日期>
|
|
5
|
+
>
|
|
6
|
+
> 这些任务由 SDD 引擎逐个执行。
|
|
7
|
+
> 每个任务包含完整代码,可直接写入文件。
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 数据库任务
|
|
12
|
+
|
|
13
|
+
- [ ] **Task-001**: 创建数据库表 <table_name>
|
|
14
|
+
- **文件**: SQL 脚本 / dbx MCP
|
|
15
|
+
- **操作**:
|
|
16
|
+
```sql
|
|
17
|
+
CREATE TABLE <table_name> (
|
|
18
|
+
id NUMBER(19) NOT NULL,
|
|
19
|
+
org_id NUMBER(19) NOT NULL,
|
|
20
|
+
-- 业务字段
|
|
21
|
+
<column_name> <oracle_type> <constraint>,
|
|
22
|
+
-- 审计字段
|
|
23
|
+
created_by VARCHAR2(64),
|
|
24
|
+
created_date DATE DEFAULT SYSDATE,
|
|
25
|
+
last_updated_by VARCHAR2(64),
|
|
26
|
+
last_updated_date DATE DEFAULT SYSDATE,
|
|
27
|
+
CONSTRAINT <tableName>_PK PRIMARY KEY (id) USING INDEX TABLESPACE <index_tablespace>
|
|
28
|
+
) TABLESPACE <data_tablespace>;
|
|
29
|
+
|
|
30
|
+
-- 唯一索引(org_id 联合,命名: 表名_U1..U5)
|
|
31
|
+
CREATE UNIQUE INDEX <tableName>_U1 ON <table_name>(org_id, <业务字段>) TABLESPACE <index_tablespace>;
|
|
32
|
+
|
|
33
|
+
-- 普通索引(命名: 表名_N1..N5)
|
|
34
|
+
CREATE INDEX <tableName>_N1 ON <table_name>(<字段>) TABLESPACE <index_tablespace>;
|
|
35
|
+
```
|
|
36
|
+
- **验证**: 表创建成功,索引创建成功,表空间正确
|
|
37
|
+
- **依赖**: 无
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 后端任务
|
|
42
|
+
|
|
43
|
+
- [ ] **Task-002**: 创建 Entity 实体类
|
|
44
|
+
- **文件**: `modules-center/{module}-center/{module}-service/src/main/java/com/twsz/mom/{module}/{sub}/model/{Entity}.java`
|
|
45
|
+
- **代码**:
|
|
46
|
+
```java
|
|
47
|
+
<完整 Entity 代码>
|
|
48
|
+
```
|
|
49
|
+
- **验证**: 编译通过
|
|
50
|
+
- **依赖**: Task-001
|
|
51
|
+
|
|
52
|
+
- [ ] **Task-003**: 创建 Mapper 接口
|
|
53
|
+
- **文件**: `.../{module}/mapper/{Entity}Mapper.java`
|
|
54
|
+
- **代码**:
|
|
55
|
+
```java
|
|
56
|
+
<完整 Mapper 接口代码>
|
|
57
|
+
```
|
|
58
|
+
- **验证**: 编译通过
|
|
59
|
+
- **依赖**: Task-002
|
|
60
|
+
|
|
61
|
+
- [ ] **Task-004**: 创建 Mapper XML
|
|
62
|
+
- **文件**: `resources/mapper/{module}/{Entity}Mapper.xml`
|
|
63
|
+
- **代码**:
|
|
64
|
+
```xml
|
|
65
|
+
<完整 Mapper XML 代码>
|
|
66
|
+
```
|
|
67
|
+
- **验证**: XML 格式正确,SQL 语法正确
|
|
68
|
+
- **依赖**: Task-003
|
|
69
|
+
|
|
70
|
+
- [ ] **Task-005**: 创建 Service 接口
|
|
71
|
+
- **文件**: `.../{module}/service/{Entity}Service.java`
|
|
72
|
+
- **代码**:
|
|
73
|
+
```java
|
|
74
|
+
<完整 Service 接口代码>
|
|
75
|
+
```
|
|
76
|
+
- **验证**: 编译通过
|
|
77
|
+
- **依赖**: Task-002
|
|
78
|
+
|
|
79
|
+
- [ ] **Task-006**: 创建 ServiceImpl 实现
|
|
80
|
+
- **文件**: `.../{module}/service/impl/{Entity}ServiceImpl.java`
|
|
81
|
+
- **代码**:
|
|
82
|
+
```java
|
|
83
|
+
<完整 ServiceImpl 代码,含业务逻辑>
|
|
84
|
+
```
|
|
85
|
+
- **验证**: 编译通过,单元测试通过
|
|
86
|
+
- **依赖**: Task-004, Task-005
|
|
87
|
+
|
|
88
|
+
- [ ] **Task-007**: 创建 Controller
|
|
89
|
+
- **文件**: `.../{module}/controller/{Entity}Controller.java`
|
|
90
|
+
- **代码**:
|
|
91
|
+
```java
|
|
92
|
+
<完整 Controller 代码>
|
|
93
|
+
```
|
|
94
|
+
- **验证**: 编译通过,接口可访问
|
|
95
|
+
- **依赖**: Task-006
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 前端任务
|
|
100
|
+
|
|
101
|
+
- [ ] **Task-008**: 创建 API 文件
|
|
102
|
+
- **文件**: `src/api/{domain}/{entity}.js`
|
|
103
|
+
- **代码**:
|
|
104
|
+
```javascript
|
|
105
|
+
<完整 API 文件代码>
|
|
106
|
+
```
|
|
107
|
+
- **验证**: 语法检查通过
|
|
108
|
+
- **依赖**: Task-007
|
|
109
|
+
|
|
110
|
+
- [ ] **Task-009**: 创建列表页
|
|
111
|
+
- **文件**: `src/views/{domain}/{entity}/index.vue`
|
|
112
|
+
- **代码**:
|
|
113
|
+
```vue
|
|
114
|
+
<完整列表页代码>
|
|
115
|
+
```
|
|
116
|
+
- **验证**: 页面可渲染,查询功能正常
|
|
117
|
+
- **依赖**: Task-008
|
|
118
|
+
|
|
119
|
+
- [ ] **Task-010**: 创建表单页
|
|
120
|
+
- **文件**: `src/views/{domain}/{entity}/{entity}-form.vue`
|
|
121
|
+
- **代码**:
|
|
122
|
+
```vue
|
|
123
|
+
<完整表单页代码>
|
|
124
|
+
```
|
|
125
|
+
- **验证**: 新增/编辑/查看功能正常
|
|
126
|
+
- **依赖**: Task-009
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 配置任务
|
|
131
|
+
|
|
132
|
+
- [ ] **Task-011**: 菜单注册
|
|
133
|
+
- **文件**: SQL 脚本
|
|
134
|
+
- **代码**:
|
|
135
|
+
```sql
|
|
136
|
+
<c_sys_resource INSERT 语句>
|
|
137
|
+
```
|
|
138
|
+
- **验证**: 菜单可见,权限生效
|
|
139
|
+
- **依赖**: Task-007
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## 任务依赖图
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
Task-001 (建表)
|
|
147
|
+
│
|
|
148
|
+
▼
|
|
149
|
+
Task-002 (Entity)
|
|
150
|
+
│
|
|
151
|
+
├──→ Task-003 (Mapper接口) ──→ Task-004 (Mapper XML)
|
|
152
|
+
│ │
|
|
153
|
+
├──→ Task-005 (Service接口) │
|
|
154
|
+
│ │ │
|
|
155
|
+
│ ▼ ▼
|
|
156
|
+
│ Task-006 (ServiceImpl) ◄────────┘
|
|
157
|
+
│ │
|
|
158
|
+
│ ▼
|
|
159
|
+
│ Task-007 (Controller)
|
|
160
|
+
│ │
|
|
161
|
+
│ ├──→ Task-008 (API JS) ──→ Task-009 (列表页) ──→ Task-010 (表单页)
|
|
162
|
+
│ │
|
|
163
|
+
│ └──→ Task-011 (菜单注册)
|
|
164
|
+
│
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## 任务统计
|
|
170
|
+
|
|
171
|
+
| 类型 | 数量 |
|
|
172
|
+
|------|:----:|
|
|
173
|
+
| 数据库 | 1 |
|
|
174
|
+
| 后端 | 6 |
|
|
175
|
+
| 前端 | 3 |
|
|
176
|
+
| 配置 | 1 |
|
|
177
|
+
| **合计** | **11** |
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
# 技术设计: <功能名称>
|
|
2
|
+
|
|
3
|
+
> 输入: 解析报告 (parse.md) + 确认结果 (confirm-scope)
|
|
4
|
+
> 设计日期: <日期>
|
|
5
|
+
> 版本: v1.0
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 0. 确认结果
|
|
10
|
+
|
|
11
|
+
| 维度 | 确认值 |
|
|
12
|
+
|------|--------|
|
|
13
|
+
| 项目根目录 | <绝对路径> |
|
|
14
|
+
| 实施范围 | <模块列表> |
|
|
15
|
+
| 后端 center | modules-center/{module}-center |
|
|
16
|
+
| 后端包路径 | com.twsz.mom.{module}.{sub} |
|
|
17
|
+
| 前端 API 目录 | src/api/{domain}/ |
|
|
18
|
+
| 前端页面目录 | src/views/{domain}/{entity}/ |
|
|
19
|
+
| 编号生成 | @AutoGenCode / 无 |
|
|
20
|
+
| 状态流转 | 有(审核/弃审) / 无 |
|
|
21
|
+
| 已有代码影响 | <列表或无> |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 1. 数据库设计
|
|
26
|
+
|
|
27
|
+
### 1.1 索引设计规范
|
|
28
|
+
|
|
29
|
+
**索引命名规范**(严格遵守):
|
|
30
|
+
|
|
31
|
+
| 索引类型 | 命名格式 | 示例 | 说明 |
|
|
32
|
+
|----------|----------|------|------|
|
|
33
|
+
| 主键索引 | `{tableName}_PK` | `pc_cad_data_PK` | 主键约束自动命名 |
|
|
34
|
+
| 普通索引 | `{tableName}_N1` ~ `N5` | `pc_cad_data_N1` | 按顺序编号,最多 5 个 |
|
|
35
|
+
| 唯一索引 | `{tableName}_U1` ~ `U5` | `pc_cad_data_U1` | 按顺序编号,最多 5 个 |
|
|
36
|
+
|
|
37
|
+
**唯一索引规范**:
|
|
38
|
+
- 必须以 `org_id` 作为首列,组成联合唯一索引
|
|
39
|
+
- 格式: `(org_id, 业务字段1, 业务字段2, ...)`
|
|
40
|
+
- 示例: `CREATE UNIQUE INDEX pc_cad_data_U1 ON pc_cad_data(org_id, material_code) TABLESPACE MES_IDX_COM;`
|
|
41
|
+
|
|
42
|
+
**表空间定义**:
|
|
43
|
+
|
|
44
|
+
| 表空间名称 | 用途 | 说明 |
|
|
45
|
+
|------------|------|------|
|
|
46
|
+
| MES_DATA_WORKS | 生产数据表空间 | 存储基础数据表、车间数据表 |
|
|
47
|
+
| MES_DATA_WMS | 仓库数据表空间 | 存储仓库表 |
|
|
48
|
+
| MES_DATA_COM | 基础数据表空间 | 存储基础数据表 |
|
|
49
|
+
| MES_IDX_WORKS | 生产索引表空间 | 存储基础数据、主车间索引 |
|
|
50
|
+
| MES_IDX_WMS | 仓库索引表空间 | 存储仓库表索引 |
|
|
51
|
+
| MES_IDX_COM | 基础数据表索引空间 | 存储基础数据索引 |
|
|
52
|
+
|
|
53
|
+
> 使用 confirm-scope 中确认的表空间。数据表使用 `MES_DATA_xxx`,索引使用 `MES_IDX_xxx`。
|
|
54
|
+
|
|
55
|
+
### 1.2 新建表
|
|
56
|
+
|
|
57
|
+
#### 表: <table_name>
|
|
58
|
+
|
|
59
|
+
```sql
|
|
60
|
+
CREATE TABLE <table_name> (
|
|
61
|
+
id NUMBER(19) NOT NULL,
|
|
62
|
+
org_id NUMBER(19) NOT NULL,
|
|
63
|
+
-- 业务字段
|
|
64
|
+
<column_name> <oracle_type> <constraint>,
|
|
65
|
+
-- 审计字段
|
|
66
|
+
created_by VARCHAR2(64),
|
|
67
|
+
created_date DATE DEFAULT SYSDATE,
|
|
68
|
+
last_updated_by VARCHAR2(64),
|
|
69
|
+
last_updated_date DATE DEFAULT SYSDATE,
|
|
70
|
+
CONSTRAINT <tableName>_PK PRIMARY KEY (id) USING INDEX TABLESPACE <index_tablespace>
|
|
71
|
+
) TABLESPACE <data_tablespace>;
|
|
72
|
+
|
|
73
|
+
COMMENT ON TABLE <table_name> IS '<表中文名>';
|
|
74
|
+
COMMENT ON COLUMN <table_name>.id IS '主键';
|
|
75
|
+
COMMENT ON COLUMN <table_name>.org_id IS '组织ID';
|
|
76
|
+
-- 其他字段注释
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**索引**:
|
|
80
|
+
|
|
81
|
+
| 索引名 | 字段 | 类型 | 表空间 | 说明 |
|
|
82
|
+
|--------|------|------|--------|------|
|
|
83
|
+
| `<tableName>_U1` | org_id, <业务字段> | UNIQUE | `<index_tablespace>` | 联合唯一(org_id 首列) |
|
|
84
|
+
| `<tableName>_N1` | <字段> | NORMAL | `<index_tablespace>` | 普通索引 |
|
|
85
|
+
|
|
86
|
+
**索引创建语句**:
|
|
87
|
+
|
|
88
|
+
```sql
|
|
89
|
+
-- 唯一索引(org_id 联合)
|
|
90
|
+
CREATE UNIQUE INDEX <tableName>_U1 ON <table_name>(org_id, <业务字段>) TABLESPACE <index_tablespace>;
|
|
91
|
+
|
|
92
|
+
-- 普通索引
|
|
93
|
+
CREATE INDEX <tableName>_N1 ON <table_name>(<字段>) TABLESPACE <index_tablespace>;
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**建表方式**:
|
|
97
|
+
- [ ] dbx MCP 工具(优先)
|
|
98
|
+
- [ ] SQL 脚本执行
|
|
99
|
+
|
|
100
|
+
> **org_id 处理说明**: org_id 仅在 DDL 中定义(用于唯一索引组合列),**不在 Entity 中声明**。
|
|
101
|
+
> MyBatis-Plus `TenantLineInnerInterceptor` 已配置多租户,INSERT/SELECT/UPDATE/DELETE 自动注入 `org_id` 条件。
|
|
102
|
+
> 业务代码(Entity、Mapper XML、Service、Controller)无需显式处理 org_id。
|
|
103
|
+
|
|
104
|
+
### 1.2 修改表(如有)
|
|
105
|
+
|
|
106
|
+
#### 表: <existing_table_name>
|
|
107
|
+
|
|
108
|
+
```sql
|
|
109
|
+
ALTER TABLE <existing_table_name> ADD (
|
|
110
|
+
<new_column> <oracle_type> <constraint>
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
COMMENT ON COLUMN <existing_table_name>.<new_column> IS '<说明>';
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 2. API 接口设计
|
|
119
|
+
|
|
120
|
+
### 2.1 标准 CRUD 接口
|
|
121
|
+
|
|
122
|
+
> 完整路径前缀: `/api/<api-path>/<entity>`
|
|
123
|
+
|
|
124
|
+
| # | Method | Path | 描述 | 请求体 | 响应体 |
|
|
125
|
+
|:-:|--------|------|------|--------|--------|
|
|
126
|
+
| 1 | POST | `/{entity}/search` | 分页查询 | PageForm<Entity> | Page<Entity> |
|
|
127
|
+
| 2 | POST | `/{entity}/add` | 新增 | Entity | — |
|
|
128
|
+
| 3 | PUT | `/{entity}/update` | 修改 | Entity | — |
|
|
129
|
+
| 4 | DELETE | `/{entity}/delete` | 批量删除 | Long[] ids | — |
|
|
130
|
+
| 5 | POST | `/{entity}/export` | 导出 Excel | Entity | file |
|
|
131
|
+
| 6 | POST | `/{entity}/uploadExcel` | 导入 Excel | MultipartFile | — |
|
|
132
|
+
|
|
133
|
+
### 2.2 外部接口(如有)
|
|
134
|
+
|
|
135
|
+
| # | Method | Path | 调用方 | 描述 |
|
|
136
|
+
|:-:|--------|------|--------|------|
|
|
137
|
+
| E-1 | | | | |
|
|
138
|
+
|
|
139
|
+
### 2.3 接口详情
|
|
140
|
+
|
|
141
|
+
#### API-1: 分页查询
|
|
142
|
+
|
|
143
|
+
- **路径**: `POST /api/<api-path>/<entity>/search`
|
|
144
|
+
- **请求体**:
|
|
145
|
+
```json
|
|
146
|
+
{
|
|
147
|
+
"size": 20,
|
|
148
|
+
"current": 1,
|
|
149
|
+
"condition": {}
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
- **响应体**:
|
|
153
|
+
```json
|
|
154
|
+
{
|
|
155
|
+
"code": 200,
|
|
156
|
+
"message": "success",
|
|
157
|
+
"data": {
|
|
158
|
+
"records": [],
|
|
159
|
+
"total": 0,
|
|
160
|
+
"size": 20,
|
|
161
|
+
"current": 1
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
<!-- 按需补充其他接口详情 -->
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## 3. 后端代码结构
|
|
171
|
+
|
|
172
|
+
### 3.1 Entity
|
|
173
|
+
|
|
174
|
+
**路径**: `modules-center/{module}-center/{module}-service/src/main/java/com/twsz/mom/{module}/{sub}/model/{Entity}.java`
|
|
175
|
+
|
|
176
|
+
```java
|
|
177
|
+
@Data
|
|
178
|
+
@EqualsAndHashCode(callSuper = false)
|
|
179
|
+
@JsonInclude(JsonInclude.Include.NON_NULL)
|
|
180
|
+
@TableName("<table_name>")
|
|
181
|
+
public class {Entity} extends BaseModel implements Serializable {
|
|
182
|
+
|
|
183
|
+
private static final long serialVersionUID = 1L;
|
|
184
|
+
|
|
185
|
+
@TableId(type = IdType.ASSIGN_ID)
|
|
186
|
+
@JsonSerialize(using = ToStringSerializer.class)
|
|
187
|
+
private Long id;
|
|
188
|
+
|
|
189
|
+
// === 业务字段 ===
|
|
190
|
+
// <从功能文档字段表映射,每个字段含 @ExcelProperty>
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### 3.2 Mapper
|
|
195
|
+
|
|
196
|
+
**接口**: `.../{module}/mapper/{Entity}Mapper.java`
|
|
197
|
+
**XML**: `resources/mapper/{module}/{Entity}Mapper.xml`
|
|
198
|
+
|
|
199
|
+
```java
|
|
200
|
+
@Mapper
|
|
201
|
+
public interface {Entity}Mapper extends BaseMapper<{Entity}> {
|
|
202
|
+
IPage<{Entity}> pageSearch(Page<{Entity}> p, @Param("entity") {Entity} entity);
|
|
203
|
+
List<{Entity}> list(@Param("entity") {Entity} entity);
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**XML 关键片段**:
|
|
208
|
+
```xml
|
|
209
|
+
<sql id="Columns">
|
|
210
|
+
id, <业务字段>, created_by, created_date, last_updated_by, last_updated_date
|
|
211
|
+
</sql>
|
|
212
|
+
|
|
213
|
+
<sql id="Where">
|
|
214
|
+
<where>
|
|
215
|
+
<if test="entity.xxx != null and entity.xxx != ''">
|
|
216
|
+
AND xxx = #{entity.xxx}
|
|
217
|
+
</if>
|
|
218
|
+
</where>
|
|
219
|
+
</sql>
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### 3.3 Service
|
|
223
|
+
|
|
224
|
+
**接口**: `.../{module}/service/{Entity}Service.java`
|
|
225
|
+
|
|
226
|
+
```java
|
|
227
|
+
public interface {Entity}Service extends IService<{Entity}> {
|
|
228
|
+
// <方法签名>
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
**关键业务逻辑**:
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
insert({Entity} entity):
|
|
236
|
+
1. <校验规则描述>
|
|
237
|
+
2. <校验通过> → baseMapper.insert(entity)
|
|
238
|
+
|
|
239
|
+
uploadExcel(List<{Entity}> list):
|
|
240
|
+
@Transactional(rollbackFor = Exception.class)
|
|
241
|
+
1. <导入校验描述>
|
|
242
|
+
2. 逐行 insert
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### 3.4 Controller
|
|
246
|
+
|
|
247
|
+
**路径**: `.../{module}/controller/{Entity}Controller.java`
|
|
248
|
+
|
|
249
|
+
```java
|
|
250
|
+
@RestController
|
|
251
|
+
@RequestMapping("/api/<api-path>/<entity>")
|
|
252
|
+
public class {Entity}Controller {
|
|
253
|
+
|
|
254
|
+
@PostMapping("/search")
|
|
255
|
+
public ResponseWrapper<Page<{Entity}>> search(@RequestBody PageForm<{Entity}> pageForm) { ... }
|
|
256
|
+
|
|
257
|
+
// <其他方法>
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## 4. 前端代码结构
|
|
264
|
+
|
|
265
|
+
### 4.1 API 文件
|
|
266
|
+
|
|
267
|
+
**路径**: `src/api/{domain}/{entity}.js`
|
|
268
|
+
|
|
269
|
+
```javascript
|
|
270
|
+
import axios from '@/libs/request'
|
|
271
|
+
import { exportExcel } from '../file'
|
|
272
|
+
const root = '/<gateway-prefix>/api'
|
|
273
|
+
|
|
274
|
+
// <API 方法列表>
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### 4.2 列表页
|
|
278
|
+
|
|
279
|
+
**路径**: `src/views/{domain}/{entity}/index.vue`
|
|
280
|
+
|
|
281
|
+
- **Mixin**: `indexPage`
|
|
282
|
+
- **搜索条件**:
|
|
283
|
+
|
|
284
|
+
| 字段 | 控件 | 说明 |
|
|
285
|
+
|------|------|------|
|
|
286
|
+
| | Input / Select / DatePicker | |
|
|
287
|
+
|
|
288
|
+
- **表格列**:
|
|
289
|
+
|
|
290
|
+
| 列名 | key | slot | 说明 |
|
|
291
|
+
|------|-----|------|------|
|
|
292
|
+
| ☐ | selection | — | 复选框 |
|
|
293
|
+
| | | | |
|
|
294
|
+
| 操作 | — | operate | 编辑/查看/删除 |
|
|
295
|
+
|
|
296
|
+
- **工具栏**: 新增 ✅ | 编辑 ✅ | 查看 ✅ | 删除 ✅ | 导出 ✅ | 导入 ✅
|
|
297
|
+
|
|
298
|
+
### 4.3 表单页
|
|
299
|
+
|
|
300
|
+
**路径**: `src/views/{domain}/{entity}/{entity}-form.vue`
|
|
301
|
+
|
|
302
|
+
- **组件**: `master-sub`
|
|
303
|
+
- **表单字段**:
|
|
304
|
+
|
|
305
|
+
| 字段 | 控件 | 必填 | 校验规则 | 说明 |
|
|
306
|
+
|------|------|:----:|----------|------|
|
|
307
|
+
| | Input / Select / iSwitch / DatePicker | | | |
|
|
308
|
+
|
|
309
|
+
- **提交逻辑**: 判断新增/编辑 → 调用 add/update API
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## 5. 业务逻辑流程
|
|
314
|
+
|
|
315
|
+
### 5.1 核心操作流程
|
|
316
|
+
|
|
317
|
+
```
|
|
318
|
+
<ASCII 流程图>
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### 5.2 校验规则汇总
|
|
322
|
+
|
|
323
|
+
| 编号 | 校验项 | 规则 | 错误提示 | 校验位置 |
|
|
324
|
+
|:----:|--------|------|----------|----------|
|
|
325
|
+
| V-01 | | | | 前端 + 后端 |
|
|
326
|
+
|
|
327
|
+
### 5.3 状态流转(如有)
|
|
328
|
+
|
|
329
|
+
```
|
|
330
|
+
<状态机图>
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## 6. 集成点
|
|
336
|
+
|
|
337
|
+
### 6.1 被调用方
|
|
338
|
+
|
|
339
|
+
| 调用方 | 接口方式 | 说明 |
|
|
340
|
+
|--------|----------|------|
|
|
341
|
+
| | | |
|
|
342
|
+
|
|
343
|
+
### 6.2 菜单权限
|
|
344
|
+
|
|
345
|
+
| 菜单名 | 权限标识 | 类型 |
|
|
346
|
+
|--------|----------|------|
|
|
347
|
+
| | | 路由 / 按钮 / API |
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## 7. 设计决策记录
|
|
352
|
+
|
|
353
|
+
| 决策 | 选项 | 结论 | 原因 |
|
|
354
|
+
|------|------|------|------|
|
|
355
|
+
| | | | |
|