ai-engineering-init 1.7.0 → 1.8.0

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.
Files changed (118) hide show
  1. package/.claude/hooks/skill-forced-eval.js +46 -62
  2. package/.claude/settings.json +10 -1
  3. package/.claude/skills/api-development/SKILL.md +179 -130
  4. package/.claude/skills/architecture-design/SKILL.md +102 -212
  5. package/.claude/skills/backend-annotations/SKILL.md +166 -220
  6. package/.claude/skills/bug-detective/SKILL.md +225 -186
  7. package/.claude/skills/code-patterns/SKILL.md +127 -244
  8. package/.claude/skills/collaborating-with-codex/SKILL.md +96 -113
  9. package/.claude/skills/crud-development/SKILL.md +226 -307
  10. package/.claude/skills/data-permission/SKILL.md +131 -202
  11. package/.claude/skills/database-ops/SKILL.md +158 -355
  12. package/.claude/skills/error-handler/SKILL.md +224 -285
  13. package/.claude/skills/file-oss-management/SKILL.md +174 -169
  14. package/.claude/skills/git-workflow/SKILL.md +123 -341
  15. package/.claude/skills/json-serialization/SKILL.md +121 -137
  16. package/.claude/skills/performance-doctor/SKILL.md +83 -89
  17. package/.claude/skills/redis-cache/SKILL.md +134 -185
  18. package/.claude/skills/scheduled-jobs/SKILL.md +187 -224
  19. package/.claude/skills/security-guard/SKILL.md +168 -276
  20. package/.claude/skills/sms-mail/SKILL.md +266 -228
  21. package/.claude/skills/social-login/SKILL.md +257 -195
  22. package/.claude/skills/tenant-management/SKILL.md +172 -188
  23. package/.claude/skills/utils-toolkit/SKILL.md +214 -222
  24. package/.claude/skills/websocket-sse/SKILL.md +251 -172
  25. package/.claude/skills/workflow-engine/SKILL.md +178 -250
  26. package/.codex/skills/api-development/SKILL.md +179 -130
  27. package/.codex/skills/architecture-design/SKILL.md +102 -212
  28. package/.codex/skills/backend-annotations/SKILL.md +166 -220
  29. package/.codex/skills/bug-detective/SKILL.md +225 -186
  30. package/.codex/skills/code-patterns/SKILL.md +127 -244
  31. package/.codex/skills/collaborating-with-codex/SKILL.md +96 -113
  32. package/.codex/skills/crud-development/SKILL.md +226 -307
  33. package/.codex/skills/data-permission/SKILL.md +131 -202
  34. package/.codex/skills/database-ops/SKILL.md +158 -355
  35. package/.codex/skills/error-handler/SKILL.md +224 -285
  36. package/.codex/skills/file-oss-management/SKILL.md +174 -169
  37. package/.codex/skills/git-workflow/SKILL.md +123 -341
  38. package/.codex/skills/json-serialization/SKILL.md +121 -137
  39. package/.codex/skills/performance-doctor/SKILL.md +83 -89
  40. package/.codex/skills/redis-cache/SKILL.md +134 -185
  41. package/.codex/skills/scheduled-jobs/SKILL.md +187 -224
  42. package/.codex/skills/security-guard/SKILL.md +168 -276
  43. package/.codex/skills/sms-mail/SKILL.md +266 -228
  44. package/.codex/skills/social-login/SKILL.md +257 -195
  45. package/.codex/skills/tenant-management/SKILL.md +172 -188
  46. package/.codex/skills/utils-toolkit/SKILL.md +214 -222
  47. package/.codex/skills/websocket-sse/SKILL.md +251 -172
  48. package/.codex/skills/workflow-engine/SKILL.md +178 -250
  49. package/.cursor/hooks/cursor-skill-eval.js +66 -6
  50. package/.cursor/skills/api-development/SKILL.md +179 -130
  51. package/.cursor/skills/architecture-design/SKILL.md +102 -212
  52. package/.cursor/skills/backend-annotations/SKILL.md +166 -220
  53. package/.cursor/skills/bug-detective/SKILL.md +225 -186
  54. package/.cursor/skills/code-patterns/SKILL.md +127 -244
  55. package/.cursor/skills/collaborating-with-codex/SKILL.md +96 -113
  56. package/.cursor/skills/crud-development/SKILL.md +226 -307
  57. package/.cursor/skills/data-permission/SKILL.md +131 -202
  58. package/.cursor/skills/database-ops/SKILL.md +158 -355
  59. package/.cursor/skills/error-handler/SKILL.md +224 -285
  60. package/.cursor/skills/file-oss-management/SKILL.md +174 -169
  61. package/.cursor/skills/git-workflow/SKILL.md +123 -341
  62. package/.cursor/skills/json-serialization/SKILL.md +121 -137
  63. package/.cursor/skills/performance-doctor/SKILL.md +83 -89
  64. package/.cursor/skills/redis-cache/SKILL.md +134 -185
  65. package/.cursor/skills/scheduled-jobs/SKILL.md +187 -224
  66. package/.cursor/skills/security-guard/SKILL.md +168 -276
  67. package/.cursor/skills/sms-mail/SKILL.md +266 -228
  68. package/.cursor/skills/social-login/SKILL.md +257 -195
  69. package/.cursor/skills/tenant-management/SKILL.md +172 -188
  70. package/.cursor/skills/utils-toolkit/SKILL.md +214 -222
  71. package/.cursor/skills/websocket-sse/SKILL.md +251 -172
  72. package/.cursor/skills/workflow-engine/SKILL.md +178 -250
  73. package/AGENTS.md +49 -540
  74. package/CLAUDE.md +73 -119
  75. package/README.md +37 -6
  76. package/bin/index.js +5 -1
  77. package/package.json +1 -1
  78. package/src/skills/api-development/SKILL.md +179 -130
  79. package/src/skills/architecture-design/SKILL.md +102 -212
  80. package/src/skills/backend-annotations/SKILL.md +166 -220
  81. package/src/skills/bug-detective/SKILL.md +225 -186
  82. package/src/skills/code-patterns/SKILL.md +127 -244
  83. package/src/skills/collaborating-with-codex/SKILL.md +96 -113
  84. package/src/skills/crud-development/SKILL.md +226 -307
  85. package/src/skills/data-permission/SKILL.md +131 -202
  86. package/src/skills/database-ops/SKILL.md +158 -355
  87. package/src/skills/error-handler/SKILL.md +224 -285
  88. package/src/skills/file-oss-management/SKILL.md +174 -169
  89. package/src/skills/git-workflow/SKILL.md +123 -341
  90. package/src/skills/json-serialization/SKILL.md +121 -137
  91. package/src/skills/performance-doctor/SKILL.md +83 -89
  92. package/src/skills/redis-cache/SKILL.md +134 -185
  93. package/src/skills/scheduled-jobs/SKILL.md +187 -224
  94. package/src/skills/security-guard/SKILL.md +168 -276
  95. package/src/skills/sms-mail/SKILL.md +266 -228
  96. package/src/skills/social-login/SKILL.md +257 -195
  97. package/src/skills/tenant-management/SKILL.md +172 -188
  98. package/src/skills/utils-toolkit/SKILL.md +214 -222
  99. package/src/skills/websocket-sse/SKILL.md +251 -172
  100. package/src/skills/workflow-engine/SKILL.md +178 -250
  101. package/.claude/skills/skill-creator/LICENSE.txt +0 -202
  102. package/.claude/skills/skill-creator/SKILL.md +0 -479
  103. package/.claude/skills/skill-creator/agents/analyzer.md +0 -274
  104. package/.claude/skills/skill-creator/agents/comparator.md +0 -202
  105. package/.claude/skills/skill-creator/agents/grader.md +0 -223
  106. package/.claude/skills/skill-creator/assets/eval_review.html +0 -146
  107. package/.claude/skills/skill-creator/eval-viewer/generate_review.py +0 -471
  108. package/.claude/skills/skill-creator/eval-viewer/viewer.html +0 -1325
  109. package/.claude/skills/skill-creator/references/schemas.md +0 -430
  110. package/.claude/skills/skill-creator/scripts/__init__.py +0 -0
  111. package/.claude/skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
  112. package/.claude/skills/skill-creator/scripts/generate_report.py +0 -326
  113. package/.claude/skills/skill-creator/scripts/improve_description.py +0 -248
  114. package/.claude/skills/skill-creator/scripts/package_skill.py +0 -136
  115. package/.claude/skills/skill-creator/scripts/quick_validate.py +0 -103
  116. package/.claude/skills/skill-creator/scripts/run_eval.py +0 -310
  117. package/.claude/skills/skill-creator/scripts/run_loop.py +0 -332
  118. package/.claude/skills/skill-creator/scripts/utils.py +0 -47
@@ -1,407 +1,210 @@
1
1
  ---
2
2
  name: database-ops
3
3
  description: |
4
- 数据库操作规范。包含建表模板、Entity 实体类模板、八大数据库设计模式、多数据库兼容。
5
-
6
- 触发场景:
7
- - 创建数据库表(MySQL/PostgreSQL/Oracle/SQL Server)
8
- - 设计 Entity 实体类(TenantEntity、@TableLogic、@Version)
9
- - 配置逻辑删除、乐观锁、审计字段
10
- - 树结构表设计(祖先路径法/父子法)
11
- - 字典数据和菜单 SQL 配置
12
-
13
- 触发词:数据库、SQL、建表、CREATE TABLE、Entity、TenantEntity、@TableLogic、del_flag、逻辑删除、字典、菜单SQL、表设计、字段设计、数据库设计
4
+ 通用数据库操作指南。涵盖建表规范、审计字段、逻辑删除、索引设计等。
5
+ 触发场景:建表、数据库设计、SQL 编写、数据迁移。
6
+ 触发词:建表、数据库、SQL、DDL、数据迁移、索引。
7
+ 注意:如果项目有专属技能(如 `leniu-database`),优先使用专属版本。
14
8
  ---
15
9
 
16
- # 数据库操作规范(RuoYi-Vue-Plus 三层架构版)
17
-
18
- > **⚠️ 重要声明**: 本项目是 **RuoYi-Vue-Plus 纯后端项目**,采用三层架构!
19
- > 本文档规范基于 **TestDemo 模块**的真实实现。
10
+ # 数据库操作指南
20
11
 
21
- ## 核心架构特征
12
+ > 通用模板。如果项目有专属技能(如 `leniu-database`),优先使用。
22
13
 
23
- | 对比项 | 本项目 (RuoYi-Vue-Plus) |
24
- |--------|----------------------|
25
- | **包名前缀** | `org.dromara.*` |
26
- | **架构** | 三层:Controller → Service → Mapper |
27
- | **Entity基类** | `TenantEntity`(多租户) |
28
- | **主键策略** | 雪花 ID(不用 AUTO_INCREMENT) |
29
- | **逻辑删除** | `@TableLogic private Long delFlag;`(Long 类型) |
30
- | **乐观锁** | `@Version private Long version;` |
31
- | **对象转换** | `MapstructUtils.convert()` |
32
- | **表前缀** | 按模块区分:sys_/test_/flow_ 等 |
14
+ ## 核心规范
33
15
 
34
- ---
35
-
36
- ## 1. Entity 实体类模板(带逻辑删除)
16
+ ### 建表标准模板
37
17
 
38
- ```java
39
- package org.dromara.demo.domain;
40
-
41
- import org.dromara.common.tenant.core.TenantEntity;
42
- import com.baomidou.mybatisplus.annotation.*;
43
- import lombok.Data;
44
- import lombok.EqualsAndHashCode;
45
- import java.io.Serial;
46
-
47
- /**
48
- * XXX 对象
49
- *
50
- * @author Lion Li
51
- */
52
- @Data
53
- @EqualsAndHashCode(callSuper = true)
54
- @TableName("demo_xxx")
55
- public class Xxx extends TenantEntity {
56
-
57
- @Serial
58
- private static final long serialVersionUID = 1L;
59
-
60
- /**
61
- * 主键 ID
62
- */
63
- @TableId(value = "id")
64
- private Long id;
65
-
66
- /**
67
- * 名称
68
- */
69
- private String xxxName;
70
-
71
- /**
72
- * 状态(0正常 1停用)
73
- */
74
- private String status;
75
-
76
- /**
77
- * 版本号(乐观锁)
78
- */
79
- @Version
80
- private Long version;
81
-
82
- /**
83
- * 删除标志(0正常 1已删除)
84
- * ✅ 使用 @TableLogic 标记,MyBatis-Plus 自动处理逻辑删除
85
- * ✅ 类型必须是 Long(自动映射到数据库 del_flag BIGINT)
86
- */
87
- @TableLogic
88
- private Long delFlag;
89
- }
18
+ ```sql
19
+ CREATE TABLE t_order (
20
+ id BIGINT NOT NULL COMMENT '主键',
21
+ order_no VARCHAR(64) NOT NULL COMMENT '订单编号',
22
+ status TINYINT NOT NULL DEFAULT 0 COMMENT '状态(0-待处理,1-已完成,2-已取消)',
23
+ amount BIGINT NOT NULL DEFAULT 0 COMMENT '金额(单位:分)',
24
+ remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
25
+ create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人',
26
+ create_time DATETIME DEFAULT NULL COMMENT '创建时间',
27
+ update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人',
28
+ update_time DATETIME DEFAULT NULL COMMENT '更新时间',
29
+ deleted TINYINT NOT NULL DEFAULT 0 COMMENT '删除标识(0-正常,1-删除)',
30
+ PRIMARY KEY (id),
31
+ UNIQUE KEY uk_order_no (order_no),
32
+ KEY idx_status (status),
33
+ KEY idx_create_time (create_time)
34
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表';
90
35
  ```
91
36
 
92
- ---
37
+ ### 审计字段规范
93
38
 
94
- ## 2. MySQL CREATE TABLE 模板
39
+ | 字段 | 类型 | 说明 | 填充时机 |
40
+ |------|------|------|---------|
41
+ | `create_by` | VARCHAR(64) | 创建人 | INSERT |
42
+ | `create_time` | DATETIME | 创建时间 | INSERT |
43
+ | `update_by` | VARCHAR(64) | 更新人 | INSERT / UPDATE |
44
+ | `update_time` | DATETIME | 更新时间 | INSERT / UPDATE |
45
+ | `deleted` | TINYINT | 逻辑删除 | 手动 / 框架自动 |
95
46
 
96
- ```sql
97
- CREATE TABLE `demo_xxx` (
98
- -- 主键和租户
99
- `id` BIGINT(20) NOT NULL COMMENT '主键 ID',
100
- `tenant_id` VARCHAR(20) DEFAULT '000000' COMMENT '租户 ID',
101
-
102
- -- 业务字段
103
- `xxx_name` VARCHAR(100) NOT NULL COMMENT '名称',
104
- `status` CHAR(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
105
-
106
- -- 版本和删除
107
- `version` INT(0) DEFAULT 0 COMMENT '版本号',
108
- `del_flag` BIGINT(20) DEFAULT 0 COMMENT '删除标志(0正常 1已删除)',
109
-
110
- -- 审计字段(必须)
111
- `create_dept` BIGINT(20) DEFAULT NULL COMMENT '创建部门',
112
- `create_by` BIGINT(20) DEFAULT NULL COMMENT '创建人',
113
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
114
- `update_by` BIGINT(20) DEFAULT NULL COMMENT '更新人',
115
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
116
- `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注(可选业务字段,不在 BaseEntity 中)',
117
-
118
- PRIMARY KEY (`id`)
119
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='XXX表';
120
- ```
47
+ > 审计字段自动填充可通过 MyBatis-Plus 的 `MetaObjectHandler` 实现。
121
48
 
122
- ---
49
+ ### 逻辑删除
123
50
 
124
- ## 3. PostgreSQL CREATE TABLE 模板
51
+ - `deleted = 0` 表示正常
52
+ - `deleted = 1` 表示已删除
53
+ - MyBatis-Plus 配置:
125
54
 
126
- ```sql
127
- CREATE TABLE demo_xxx (
128
- -- 主键和租户
129
- id BIGINT NOT NULL,
130
- tenant_id VARCHAR(20) DEFAULT '000000',
131
-
132
- -- 业务字段
133
- xxx_name VARCHAR(100) NOT NULL,
134
- status CHAR(1) DEFAULT '0',
135
-
136
- -- 版本和删除
137
- version INT DEFAULT 0,
138
- del_flag BIGINT DEFAULT 0,
139
-
140
- -- 审计字段
141
- create_dept BIGINT DEFAULT NULL,
142
- create_by BIGINT DEFAULT NULL,
143
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
144
- update_by BIGINT DEFAULT NULL,
145
- update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
146
- remark VARCHAR(500) DEFAULT NULL,
147
-
148
- PRIMARY KEY (id)
149
- );
150
-
151
- COMMENT ON TABLE demo_xxx IS 'XXX表';
152
- COMMENT ON COLUMN demo_xxx.id IS '主键 ID';
153
- COMMENT ON COLUMN demo_xxx.tenant_id IS '租户 ID';
154
- COMMENT ON COLUMN demo_xxx.xxx_name IS '名称';
155
- COMMENT ON COLUMN demo_xxx.del_flag IS '删除标志(0正常 1已删除)';
55
+ ```yaml
56
+ mybatis-plus:
57
+ global-config:
58
+ db-config:
59
+ logic-delete-field: deleted
60
+ logic-delete-value: 1
61
+ logic-not-delete-value: 0
156
62
  ```
157
63
 
158
- ---
64
+ ### 命名规范
159
65
 
160
- ## 4. 八大数据库设计模式
66
+ | 类型 | 规范 | 示例 |
67
+ |------|------|------|
68
+ | 表名 | 小写下划线,建议加前缀 | `t_order`, `sys_user` |
69
+ | 字段名 | 小写下划线 | `order_no`, `create_time` |
70
+ | 主键 | `id` | `id BIGINT NOT NULL` |
71
+ | 外键字段 | `关联表_id` | `user_id`, `order_id` |
72
+ | 唯一索引 | `uk_字段名` | `uk_order_no` |
73
+ | 普通索引 | `idx_字段名` | `idx_status` |
74
+ | 联合索引 | `idx_字段1_字段2` | `idx_user_id_status` |
161
75
 
162
- ### 模式一:多租户隔离
76
+ ## 代码示例
163
77
 
164
- ```java
165
- // 自动处理:TenantEntity 已包含
166
- private String tenantId; // 自动填充为当前租户 ID
78
+ ### 审计字段自动填充
167
79
 
168
- // SQL 查询自动添加租户过滤:
169
- // WHERE tenant_id = ?
80
+ ```java
81
+ @Component
82
+ public class MyMetaObjectHandler implements MetaObjectHandler {
83
+
84
+ @Override
85
+ public void insertFill(MetaObject metaObject) {
86
+ this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
87
+ this.strictInsertFill(metaObject, "createBy", String.class, getCurrentUser());
88
+ this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
89
+ this.strictInsertFill(metaObject, "updateBy", String.class, getCurrentUser());
90
+ }
91
+
92
+ @Override
93
+ public void updateFill(MetaObject metaObject) {
94
+ this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
95
+ this.strictUpdateFill(metaObject, "updateBy", String.class, getCurrentUser());
96
+ }
97
+
98
+ private String getCurrentUser() {
99
+ // 从安全上下文获取当前用户,按项目实际实现
100
+ return [你的用户上下文工具].getCurrentUsername();
101
+ }
102
+ }
170
103
  ```
171
104
 
172
- **使用场景**:所有需要租户隔离的业务表
105
+ ### 常见数据库设计模式
173
106
 
174
- ---
175
-
176
- ### 模式二:树结构 - 祖先路径法(推荐)
107
+ #### 模式一:树结构 - 祖先路径法
177
108
 
178
109
  ```sql
179
- CREATE TABLE demo_tree (
180
- id BIGINT NOT NULL,
181
- parent_id BIGINT,
182
- ancestors VARCHAR(500), -- 祖先路径:0,1,2,3
183
- name VARCHAR(100),
184
- del_flag BIGINT DEFAULT 0,
110
+ CREATE TABLE t_org (
111
+ id BIGINT NOT NULL COMMENT '主键',
112
+ parent_id BIGINT DEFAULT NULL COMMENT '父节点ID',
113
+ ancestors VARCHAR(500) DEFAULT NULL COMMENT '祖先路径(逗号分隔)',
114
+ name VARCHAR(100) NOT NULL COMMENT '节点名称',
115
+ sort INT NOT NULL DEFAULT 0 COMMENT '排序',
116
+ create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人',
117
+ create_time DATETIME DEFAULT NULL COMMENT '创建时间',
118
+ update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人',
119
+ update_time DATETIME DEFAULT NULL COMMENT '更新时间',
120
+ deleted TINYINT NOT NULL DEFAULT 0 COMMENT '删除标识(0-正常,1-删除)',
185
121
  PRIMARY KEY (id),
186
- INDEX idx_ancestors (ancestors)
187
- ) COMMENT='树形表';
122
+ KEY idx_parent_id (parent_id),
123
+ KEY idx_ancestors (ancestors(255))
124
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='组织树';
188
125
  ```
189
126
 
190
- **优势**:快速查询所有祖先和子孙节点(无需递归)
191
-
192
- ---
193
-
194
- ### 模式三:树结构 - 简单父子法
127
+ #### 模式二:关联表(多对多)
195
128
 
196
129
  ```sql
197
- CREATE TABLE demo_tree_simple (
198
- id BIGINT NOT NULL,
199
- parent_id BIGINT,
200
- name VARCHAR(100),
201
- del_flag BIGINT DEFAULT 0,
130
+ CREATE TABLE t_user_role (
131
+ id BIGINT NOT NULL COMMENT '主键',
132
+ user_id BIGINT NOT NULL COMMENT '用户ID',
133
+ role_id BIGINT NOT NULL COMMENT '角色ID',
134
+ create_time DATETIME DEFAULT NULL COMMENT '创建时间',
202
135
  PRIMARY KEY (id),
203
- FOREIGN KEY (parent_id) REFERENCES demo_tree_simple(id)
204
- ) COMMENT='简单树形表';
136
+ UNIQUE KEY uk_user_role (user_id, role_id)
137
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联';
205
138
  ```
206
139
 
207
- **适用**:二级分类、简单层级
208
-
209
- ---
210
-
211
- ### 模式四:软删除(逻辑删除)
140
+ #### 模式三:状态字段(枚举驱动)
212
141
 
213
142
  ```java
214
- // Java Entity 中
215
- @TableLogic
216
- private Long delFlag; // 0=正常,1=已删除
217
-
218
- // MyBatis-Plus 自动处理
219
- // INSERT/UPDATE: 业务代码不变
220
- // SELECT: 自动添加 WHERE del_flag = 0
221
- // DELETE: 转换为 UPDATE del_flag = 1
222
- ```
143
+ @Getter
144
+ @AllArgsConstructor
145
+ public enum OrderStatusEnum {
223
146
 
224
- **优势**:数据可恢复,审计日志完整
147
+ PENDING(0, "待处理"),
148
+ COMPLETED(1, "已完成"),
149
+ CANCELLED(2, "已取消");
225
150
 
226
- ---
227
-
228
- ### 模式五:审计追踪(自动填充)
229
-
230
- ```sql
231
- CREATE TABLE demo_audit (
232
- id BIGINT NOT NULL,
233
- create_dept BIGINT, -- 创建部门(自动填充)
234
- create_by BIGINT, -- 创建人(自动填充)
235
- create_time DATETIME, -- 创建时间(自动填充)
236
- update_by BIGINT, -- 更新人(自动填充)
237
- update_time DATETIME, -- 更新时间(自动填充)
238
- PRIMARY KEY (id)
239
- ) COMMENT='带审计的表';
240
- ```
241
-
242
- **TenantEntity 已包含所有审计字段**
243
-
244
- ---
245
-
246
- ### 模式六:状态字段(字典驱动)
247
-
248
- ```java
249
- @ExcelProperty(value = "状态")
250
- @ExcelDictFormat(dictType = "sys_normal_disable")
251
- private String status; // 0=正常,1=停用
252
- ```
253
-
254
- **配合字典表**:不硬编码状态值,支持动态扩展
255
-
256
- ---
257
-
258
- ### 模式七:数据权限控制
259
-
260
- ```java
261
- // ✅ 在 Mapper 接口上标注(类级别或方法级别均可)
262
- @DataPermission({
263
- @DataColumn(key = "deptName", value = "dept_id"),
264
- @DataColumn(key = "userName", value = "user_id")
265
- })
266
- public interface XxxMapper extends BaseMapperPlus<Xxx, XxxVo> {
151
+ private final int code;
152
+ private final String desc;
267
153
  }
268
- ```
269
-
270
- **权限类型**(通过 `sys_role.data_scope` 配置):
271
- - 1=全部数据权限、2=自定义数据权限、3=本部门数据权限
272
- - 4=本部门及以下数据权限、5=仅本人数据权限
273
-
274
- ---
275
-
276
- ### 模式八:跨数据库兼容
277
-
278
- | 场景 | MySQL | PostgreSQL | Oracle | SQL Server |
279
- |------|-------|-----------|--------|------------|
280
- | 查询 Long 字段 | `LIKE` | `CAST AS VARCHAR)` | `TO_CHAR()` | `CAST` |
281
- | 自增ID | MyBatis-Plus 雪花ID | 同 | 同 | 同 |
282
- | 日期函数 | `CURRENT_TIMESTAMP` | `NOW()` | `SYSDATE` | `GETDATE()` |
283
-
284
- ---
285
-
286
- ## 5. 模块表前缀参考
287
-
288
- | 模块 | 前缀 | 包路径 | 示例表 |
289
- |------|------|--------|---------|
290
- | system | `sys_` | `org.dromara.system` | sys_user, sys_menu |
291
- | demo | `test_` | `org.dromara.demo` | test_demo, test_tree |
292
- | workflow | `flow_` | `org.dromara.workflow` | flow_xxx |
293
-
294
- ---
295
-
296
- ## 6. 常见错误对比
297
-
298
- ### ❌ 不要做
299
-
300
- ```sql
301
- -- 错误1: 使用自增 ID
302
- id INT AUTO_INCREMENT
303
-
304
- -- 错误2: 使用 TINYINT 存储删除标志
305
- del_flag TINYINT(1) -- ❌ 应该用 BIGINT
306
-
307
- -- 错误3: 软删除字段缺少注释
308
- del_flag BIGINT -- ❌ 应添加注释说明用途
309
154
 
310
- -- 错误4: 缺少审计字段
311
- CREATE TABLE xxx (id BIGINT) -- 缺少 create_by, update_by 等
312
-
313
- -- 错误5: 字段名不规范
314
- userName VARCHAR(50) -- ❌ 应该是 user_name
315
-
316
- -- 错误6: COMMENT 使用英文(⚠️ 高频错误,尤其 Codex 协作时)
317
- `user_name` VARCHAR(50) COMMENT 'user name' -- ❌ 禁止英文!
318
- `status` CHAR(1) COMMENT 'status(0=normal 1=off)' -- ❌ 禁止英文!
319
- COMMENT='user table' -- ❌ 表注释也禁止英文!
155
+ // SQL 字段
156
+ // status TINYINT NOT NULL DEFAULT 0 COMMENT '状态(0-待处理,1-已完成,2-已取消)'
320
157
  ```
321
158
 
322
- ### ✅ 正确做法
159
+ ### 常见查询模式
323
160
 
324
161
  ```sql
325
- -- 正确1: 使用雪花 ID(MyBatis-Plus 自动生成)
326
- id BIGINT(20) NOT NULL
327
-
328
- -- 正确2: 逻辑删除字段用 BIGINT
329
- del_flag BIGINT(20) DEFAULT 0 COMMENT '删除标志'
330
-
331
- -- 正确3: 添加完整注释
332
- del_flag BIGINT(20) DEFAULT 0 COMMENT '删除标志(0正常 1已删除)'
333
-
334
- -- 正确4: 包含所有审计字段(TenantEntity 提供)
335
- CREATE TABLE xxx (
336
- create_by BIGINT,
337
- create_time DATETIME,
338
- update_by BIGINT,
339
- update_time DATETIME
340
- )
341
-
342
- -- 正确5: 字段名使用蛇形命名法
343
- user_name VARCHAR(50)
344
-
345
- -- 正确6: COMMENT 必须使用中文
346
- `user_name` VARCHAR(50) COMMENT '用户名' -- ✅ 中文
347
- `status` CHAR(1) DEFAULT '0' COMMENT '状态(0正常 1停用)' -- ✅ 中文
348
- COMMENT='用户表' -- ✅ 表注释中文
162
+ -- 分页查询(配合 MyBatis-Plus Page)
163
+ SELECT id, order_no, status, amount, create_time
164
+ FROM t_order
165
+ WHERE deleted = 0
166
+ AND status = #{status}
167
+ ORDER BY create_time DESC;
168
+
169
+ -- 批量插入
170
+ INSERT INTO t_order (id, order_no, status, amount, create_by, create_time, deleted)
171
+ VALUES
172
+ (#{id1}, #{orderNo1}, 0, #{amount1}, #{createBy}, NOW(), 0),
173
+ (#{id2}, #{orderNo2}, 0, #{amount2}, #{createBy}, NOW(), 0);
174
+
175
+ -- 逻辑删除
176
+ UPDATE t_order SET deleted = 1, update_by = #{updateBy}, update_time = NOW()
177
+ WHERE id = #{id} AND deleted = 0;
349
178
  ```
350
179
 
351
- ---
352
-
353
- ## 7. 检查清单
354
-
355
- 生成表前必须检查:
356
-
357
- - [ ] **主键是否是 BIGINT(20)?**(使用雪花 ID)
358
- - [ ] **是否有 tenant_id 字段?**(多租户隔离)
359
- - [ ] **是否有 del_flag BIGINT 字段?**(逻辑删除)
360
- - [ ] **是否有 version BIGINT 字段?**(乐观锁)
361
- - [ ] **是否有完整的审计字段?**(create_by, create_time, update_by, update_time)
362
- - [ ] **字段名是否全部使用蛇形命名法?**(xxx_name 而非 xxxName)
363
- - [ ] **所有字段是否有注释?**
364
- - [ ] **所有 COMMENT 是否使用中文?**(禁止英文 COMMENT,包括字段注释和表注释)
365
- - [ ] **Entity 是否继承 TenantEntity?**
366
- - [ ] **@TableLogic 注解是否应用到 delFlag?**
367
- - [ ] **SQL 脚本是否保存到正确目录?**(script/sql/ry_vue_5.X.sql)
368
-
369
- ---
370
-
371
- ## 8. SQL 文件位置
372
-
373
- | 数据库 | 脚本位置 |
374
- |--------|---------|
375
- | MySQL | `script/sql/ry_vue_5.X.sql` |
376
- | PostgreSQL | `script/sql/postgres/postgres_ry_vue_5.X.sql` |
377
- | Oracle | `script/sql/oracle/oracle_ry_vue_5.X.sql` |
378
- | SQL Server | `script/sql/sqlserver/sqlserver_ry_vue_5.X.sql` |
180
+ ### 索引设计原则
379
181
 
380
- ---
381
-
382
- ## 参考实现
383
-
384
- 查看已有的完整实现:
385
-
386
- - **Entity 参考**: `org.dromara.demo.domain.TestDemo`
387
- - **表结构参考**: `script/sql/ry_vue_5.X.sql` 中的 test_demo 表
388
-
389
- **特别注意**:
390
- - ✅ 软删除字段类型是 `Long delFlag`(不是 CHAR(1))
391
- - ✅ MyBatis-Plus 自动将 Java `delFlag` 映射到数据库 `del_flag`
392
- - ✅ `@TableLogic` 注解自动处理查询和删除操作
182
+ 1. **必须有主键**:推荐 BIGINT 雪花 ID 或自增
183
+ 2. **高频查询字段建索引**:WHERE、JOIN、ORDER BY 中的字段
184
+ 3. **联合索引遵循最左前缀**:把区分度高的字段放前面
185
+ 4. **避免在大文本字段上建索引**:TEXT、BLOB 等
186
+ 5. **控制单表索引数量**:建议不超过 5-6 个
393
187
 
394
- ---
395
-
396
- ## 参考实现
397
-
398
- 查看已有的完整实现:
188
+ ### 数据迁移脚本规范
399
189
 
400
- - **Entity 参考**: `org.dromara.demo.domain.TestDemo`
401
- - **表结构参考**: `script/sql/ry_vue_5.X.sql` 中的 test_demo 表
190
+ ```sql
191
+ -- V1.0.1__add_order_remark.sql
192
+ -- 描述:订单表新增备注字段
193
+ -- 作者:xxx
194
+ -- 日期:2024-01-01
402
195
 
403
- **特别注意**:
404
- - ✅ 软删除字段类型是 `Long delFlag`(不是 CHAR(1))
405
- - ✅ MyBatis-Plus 自动将 Java `delFlag` 映射到数据库 `del_flag`
406
- - ✅ `@TableLogic` 注解自动处理查询和删除操作
196
+ ALTER TABLE t_order ADD COLUMN remark VARCHAR(500) DEFAULT NULL COMMENT '备注' AFTER amount;
197
+ ```
407
198
 
199
+ ## 常见错误
200
+
201
+ | 错误 | 正确做法 |
202
+ |------|---------|
203
+ | 用 VARCHAR 存金额 | 用 BIGINT 存分,或 DECIMAL(10,2) |
204
+ | 字段不加 COMMENT | 所有字段必须有注释 |
205
+ | 表没有主键 | 每张表必须有主键 |
206
+ | 用 UUID 做主键 | 推荐 BIGINT(索引友好) |
207
+ | 逻辑删除值搞反 | 确认项目约定(通用:0=正常, 1=删除) |
208
+ | 大表无索引 | 根据查询模式建立合适索引 |
209
+ | 字段允许 NULL 但业务不允许 | 加 NOT NULL 约束 + DEFAULT 值 |
210
+ | 直接物理删除数据 | 使用逻辑删除,保留数据可追溯 |