ai-engineering-init 1.7.0 → 1.10.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 (139) hide show
  1. package/.claude/agents/bug-analyzer.md +103 -0
  2. package/.claude/agents/code-reviewer.md +115 -5
  3. package/.claude/agents/image-reader.md +154 -0
  4. package/.claude/agents/loki-runner.md +80 -0
  5. package/.claude/agents/mysql-runner.md +81 -0
  6. package/.claude/agents/requirements-analyzer.md +162 -0
  7. package/.claude/agents/task-fetcher.md +75 -0
  8. package/.claude/commands/dev.md +29 -0
  9. package/.claude/commands/next.md +31 -1
  10. package/.claude/commands/progress.md +23 -1
  11. package/.claude/hooks/skill-forced-eval.js +46 -62
  12. package/.claude/settings.json +10 -1
  13. package/.claude/skills/api-development/SKILL.md +179 -130
  14. package/.claude/skills/architecture-design/SKILL.md +102 -212
  15. package/.claude/skills/backend-annotations/SKILL.md +166 -220
  16. package/.claude/skills/bug-detective/SKILL.md +225 -186
  17. package/.claude/skills/code-patterns/SKILL.md +127 -244
  18. package/.claude/skills/collaborating-with-codex/SKILL.md +96 -113
  19. package/.claude/skills/crud-development/SKILL.md +226 -307
  20. package/.claude/skills/data-permission/SKILL.md +131 -202
  21. package/.claude/skills/database-ops/SKILL.md +158 -355
  22. package/.claude/skills/error-handler/SKILL.md +224 -285
  23. package/.claude/skills/file-oss-management/SKILL.md +174 -169
  24. package/.claude/skills/git-workflow/SKILL.md +123 -341
  25. package/.claude/skills/json-serialization/SKILL.md +121 -137
  26. package/.claude/skills/performance-doctor/SKILL.md +83 -89
  27. package/.claude/skills/redis-cache/SKILL.md +134 -185
  28. package/.claude/skills/scheduled-jobs/SKILL.md +187 -224
  29. package/.claude/skills/security-guard/SKILL.md +168 -276
  30. package/.claude/skills/sms-mail/SKILL.md +266 -228
  31. package/.claude/skills/social-login/SKILL.md +257 -195
  32. package/.claude/skills/tenant-management/SKILL.md +172 -188
  33. package/.claude/skills/utils-toolkit/SKILL.md +214 -222
  34. package/.claude/skills/websocket-sse/SKILL.md +251 -172
  35. package/.claude/skills/workflow-engine/SKILL.md +178 -250
  36. package/.codex/skills/api-development/SKILL.md +179 -130
  37. package/.codex/skills/architecture-design/SKILL.md +102 -212
  38. package/.codex/skills/backend-annotations/SKILL.md +166 -220
  39. package/.codex/skills/bug-detective/SKILL.md +225 -186
  40. package/.codex/skills/code-patterns/SKILL.md +127 -244
  41. package/.codex/skills/collaborating-with-codex/SKILL.md +96 -113
  42. package/.codex/skills/crud-development/SKILL.md +226 -307
  43. package/.codex/skills/data-permission/SKILL.md +131 -202
  44. package/.codex/skills/database-ops/SKILL.md +158 -355
  45. package/.codex/skills/dev/SKILL.md +476 -131
  46. package/.codex/skills/error-handler/SKILL.md +224 -285
  47. package/.codex/skills/file-oss-management/SKILL.md +174 -169
  48. package/.codex/skills/git-workflow/SKILL.md +123 -341
  49. package/.codex/skills/json-serialization/SKILL.md +121 -137
  50. package/.codex/skills/next/SKILL.md +186 -42
  51. package/.codex/skills/performance-doctor/SKILL.md +83 -89
  52. package/.codex/skills/progress/SKILL.md +147 -76
  53. package/.codex/skills/redis-cache/SKILL.md +134 -185
  54. package/.codex/skills/scheduled-jobs/SKILL.md +187 -224
  55. package/.codex/skills/security-guard/SKILL.md +168 -276
  56. package/.codex/skills/sms-mail/SKILL.md +266 -228
  57. package/.codex/skills/social-login/SKILL.md +257 -195
  58. package/.codex/skills/tenant-management/SKILL.md +172 -188
  59. package/.codex/skills/utils-toolkit/SKILL.md +214 -222
  60. package/.codex/skills/websocket-sse/SKILL.md +251 -172
  61. package/.codex/skills/workflow-engine/SKILL.md +178 -250
  62. package/.cursor/agents/bug-analyzer.md +102 -0
  63. package/.cursor/agents/code-reviewer.md +80 -97
  64. package/.cursor/agents/image-reader.md +154 -0
  65. package/.cursor/agents/loki-runner.md +80 -0
  66. package/.cursor/agents/mysql-runner.md +81 -0
  67. package/.cursor/agents/project-manager.md +1 -1
  68. package/.cursor/agents/requirements-analyzer.md +141 -0
  69. package/.cursor/agents/task-fetcher.md +75 -0
  70. package/.cursor/hooks/cursor-skill-eval.js +66 -6
  71. package/.cursor/skills/api-development/SKILL.md +179 -130
  72. package/.cursor/skills/architecture-design/SKILL.md +102 -212
  73. package/.cursor/skills/backend-annotations/SKILL.md +166 -220
  74. package/.cursor/skills/bug-detective/SKILL.md +225 -186
  75. package/.cursor/skills/code-patterns/SKILL.md +127 -244
  76. package/.cursor/skills/collaborating-with-codex/SKILL.md +96 -113
  77. package/.cursor/skills/crud-development/SKILL.md +226 -307
  78. package/.cursor/skills/data-permission/SKILL.md +131 -202
  79. package/.cursor/skills/database-ops/SKILL.md +158 -355
  80. package/.cursor/skills/error-handler/SKILL.md +224 -285
  81. package/.cursor/skills/file-oss-management/SKILL.md +174 -169
  82. package/.cursor/skills/git-workflow/SKILL.md +123 -341
  83. package/.cursor/skills/json-serialization/SKILL.md +121 -137
  84. package/.cursor/skills/performance-doctor/SKILL.md +83 -89
  85. package/.cursor/skills/redis-cache/SKILL.md +134 -185
  86. package/.cursor/skills/scheduled-jobs/SKILL.md +187 -224
  87. package/.cursor/skills/security-guard/SKILL.md +168 -276
  88. package/.cursor/skills/sms-mail/SKILL.md +266 -228
  89. package/.cursor/skills/social-login/SKILL.md +257 -195
  90. package/.cursor/skills/tenant-management/SKILL.md +172 -188
  91. package/.cursor/skills/utils-toolkit/SKILL.md +214 -222
  92. package/.cursor/skills/websocket-sse/SKILL.md +251 -172
  93. package/.cursor/skills/workflow-engine/SKILL.md +178 -250
  94. package/AGENTS.md +117 -540
  95. package/CLAUDE.md +105 -117
  96. package/README.md +37 -6
  97. package/bin/index.js +5 -1
  98. package/package.json +1 -1
  99. package/src/skills/api-development/SKILL.md +179 -130
  100. package/src/skills/architecture-design/SKILL.md +102 -212
  101. package/src/skills/backend-annotations/SKILL.md +166 -220
  102. package/src/skills/bug-detective/SKILL.md +225 -186
  103. package/src/skills/code-patterns/SKILL.md +127 -244
  104. package/src/skills/collaborating-with-codex/SKILL.md +96 -113
  105. package/src/skills/crud-development/SKILL.md +226 -307
  106. package/src/skills/data-permission/SKILL.md +131 -202
  107. package/src/skills/database-ops/SKILL.md +158 -355
  108. package/src/skills/error-handler/SKILL.md +224 -285
  109. package/src/skills/file-oss-management/SKILL.md +174 -169
  110. package/src/skills/git-workflow/SKILL.md +123 -341
  111. package/src/skills/json-serialization/SKILL.md +121 -137
  112. package/src/skills/performance-doctor/SKILL.md +83 -89
  113. package/src/skills/redis-cache/SKILL.md +134 -185
  114. package/src/skills/scheduled-jobs/SKILL.md +187 -224
  115. package/src/skills/security-guard/SKILL.md +168 -276
  116. package/src/skills/sms-mail/SKILL.md +266 -228
  117. package/src/skills/social-login/SKILL.md +257 -195
  118. package/src/skills/tenant-management/SKILL.md +172 -188
  119. package/src/skills/utils-toolkit/SKILL.md +214 -222
  120. package/src/skills/websocket-sse/SKILL.md +251 -172
  121. package/src/skills/workflow-engine/SKILL.md +178 -250
  122. package/.claude/skills/skill-creator/LICENSE.txt +0 -202
  123. package/.claude/skills/skill-creator/SKILL.md +0 -479
  124. package/.claude/skills/skill-creator/agents/analyzer.md +0 -274
  125. package/.claude/skills/skill-creator/agents/comparator.md +0 -202
  126. package/.claude/skills/skill-creator/agents/grader.md +0 -223
  127. package/.claude/skills/skill-creator/assets/eval_review.html +0 -146
  128. package/.claude/skills/skill-creator/eval-viewer/generate_review.py +0 -471
  129. package/.claude/skills/skill-creator/eval-viewer/viewer.html +0 -1325
  130. package/.claude/skills/skill-creator/references/schemas.md +0 -430
  131. package/.claude/skills/skill-creator/scripts/__init__.py +0 -0
  132. package/.claude/skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
  133. package/.claude/skills/skill-creator/scripts/generate_report.py +0 -326
  134. package/.claude/skills/skill-creator/scripts/improve_description.py +0 -248
  135. package/.claude/skills/skill-creator/scripts/package_skill.py +0 -136
  136. package/.claude/skills/skill-creator/scripts/quick_validate.py +0 -103
  137. package/.claude/skills/skill-creator/scripts/run_eval.py +0 -310
  138. package/.claude/skills/skill-creator/scripts/run_loop.py +0 -332
  139. 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
+ | 直接物理删除数据 | 使用逻辑删除,保留数据可追溯 |