zero-ai 1.0.82 → 1.0.84

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/ExCommand.md ADDED
@@ -0,0 +1,674 @@
1
+ # ai ex- 命令详细文档
2
+
3
+ 本文档描述 `ai ex-` 系列命令的详细用法,包括输入数据格式和执行流程。
4
+
5
+ ## 目录
6
+
7
+ - [ai ex-api](#ai-ex-api) - 从 YAML 元数据生成 RBAC Excel(资源/权限授权)
8
+ - [ai ex-crud](#ai-ex-crud) - 从 YAML 元数据生成 CRUD Excel(增删改查权限)
9
+ - [ai ex-perm](#ai-ex-perm) - 按参考角色复制权限到指定角色
10
+ - [ai ex-app](#ai-ex-app) - 清理缓存目录中不存在于数据库的应用实例
11
+
12
+ ---
13
+
14
+ ## ai ex-api
15
+
16
+ ### 功能说明
17
+
18
+ 从 `.r2mo/task/command/ex-api` 目录加载多份 YAML 配置文件(metadata.r),多选后执行 RBAC 授权(写入数据库 + 生成 Excel),处理成功后将配置文件移至 `backup` 目录并加 `.bak` 后缀。
19
+
20
+ ### 命令格式
21
+
22
+ ```bash
23
+ ai ex-api [选项]
24
+ ```
25
+
26
+ ### 选项
27
+
28
+ | 选项 | 别名 | 类型 | 默认值 | 说明 |
29
+ |------|------|------|--------|------|
30
+ | `--skip` | `-s` | boolean | false | 仅生成 Excel,跳过去重等检查 |
31
+
32
+ ### 前置条件
33
+
34
+ #### 环境变量(数据库)
35
+
36
+ 必须设置以下环境变量(可在 `.r2mo/app.env` 中 export):
37
+
38
+ ```bash
39
+ export Z_DB_TYPE="MYSQL" # 数据库类型
40
+ export Z_DB_HOST="127.0.0.1" # 数据库主机
41
+ export Z_DB_PORT="3306" # 数据库端口
42
+ export Z_DBS_INSTANCE="your_db" # 业务数据库实例名
43
+ export Z_DB_APP_USER="username" # 数据库用户
44
+ export Z_DB_APP_PASS="password" # 数据库密码
45
+ ```
46
+
47
+ #### 环境变量(应用)
48
+
49
+ ```bash
50
+ export Z_APP_ID="app-uuid" # 应用 ID
51
+ export Z_TENANT="tenant-id" # 租户标识
52
+ export Z_SIGMA="sigma-key" # Sigma 维度键
53
+ ```
54
+
55
+ ### 配置文件位置
56
+
57
+ 命令会在以下位置查找配置目录(按优先级):
58
+
59
+ 1. `当前目录/.r2mo/task/command/ex-api`
60
+ 2. `上级目录/.r2mo/task/command/ex-api`
61
+ 3. `上上级目录/.r2mo/task/command/ex-api`
62
+
63
+ ### YAML 配置格式
64
+
65
+ 在 `.r2mo/task/command/ex-api` 目录下创建 YAML 文件(可多个),格式如下:
66
+
67
+ ```yaml
68
+ # 示例:user-management.yaml
69
+ metadata:
70
+ # 资源定义
71
+ resources:
72
+ - identifier: "user.list" # 资源标识符(唯一)
73
+ name: "用户列表" # 资源名称
74
+ type: "resource.ambient" # 资源类型
75
+ uri: "/api/users" # API 路径
76
+ method: "GET" # HTTP 方法
77
+
78
+ - identifier: "user.create"
79
+ name: "创建用户"
80
+ type: "resource.ambient"
81
+ uri: "/api/users"
82
+ method: "POST"
83
+
84
+ # 权限集定义(可选)
85
+ permissionSets:
86
+ - code: "USER_ADMIN" # 权限集代码
87
+ name: "用户管理员" # 权限集名称
88
+ permissions: # 包含的权限
89
+ - "user.list"
90
+ - "user.create"
91
+ - "user.update"
92
+ - "user.delete"
93
+
94
+ # target 配置(可选,用于模块化项目)
95
+ target:
96
+ root: "ZERO_MODULE" # 环境变量名
97
+ module: "ambient" # 模块名(会查找 zero-exmodule-{module})
98
+ ```
99
+
100
+ ### 执行流程
101
+
102
+ 1. **扫描配置文件**:从配置目录加载所有 `.yaml` / `.yml` 文件
103
+ 2. **用户选择**:通过交互式界面多选要执行的配置
104
+ 3. **环境检查**:验证数据库和应用环境变量是否齐全
105
+ 4. **连接数据库**:建立数据库连接
106
+ 5. **写入 RBAC 表**:
107
+ - `S_RESOURCE`:资源表
108
+ - `S_ACTION`:操作表
109
+ - `S_PERMISSION`:权限表
110
+ - `S_PERM_SET`:权限集表(如果定义)
111
+ 6. **生成 Excel**:
112
+ - 输出到 `plugins/{pluginId}/security/RBAC_RESOURCE/`
113
+ - 使用模板 `src/_template/EXCEL/ex-api/template-RBAC_RESOURCE.xlsx`
114
+ 7. **备份配置**:将处理成功的 YAML 文件移至 `backup/` 并加 `.bak` 后缀
115
+
116
+ ### 输出位置
117
+
118
+ #### 标准项目(ONE 架构)
119
+
120
+ ```
121
+ 项目根目录/
122
+ └── src/main/resources/plugins/
123
+ └── zero-launcher-configuration/
124
+ └── security/
125
+ └── RBAC_RESOURCE/
126
+ └── {identifier}.xlsx
127
+ ```
128
+
129
+ #### DPA 架构
130
+
131
+ ```
132
+ 项目根目录/
133
+ └── {artifactId}-api/
134
+ └── src/main/resources/plugins/
135
+ └── zero-launcher-configuration/
136
+ └── security/
137
+ └── RBAC_RESOURCE/
138
+ └── {identifier}.xlsx
139
+ ```
140
+
141
+ #### 模块化项目(target 配置)
142
+
143
+ ```
144
+ $ZERO_MODULE/
145
+ └── zero-exmodule-{module}/
146
+ └── zero-exmodule-{module}-domain/
147
+ └── src/main/resources/plugins/
148
+ └── zero-exmodule-{module}/
149
+ └── security/
150
+ └── RBAC_RESOURCE/
151
+ └── {identifier}.xlsx
152
+ ```
153
+
154
+ ### 使用示例
155
+
156
+ ```bash
157
+ # 标准执行(连接数据库 + 生成 Excel)
158
+ ai ex-api
159
+
160
+ # 仅生成 Excel,跳过数据库操作
161
+ ai ex-api -s
162
+ ai ex-api --skip
163
+ ```
164
+
165
+ ### 注意事项
166
+
167
+ 1. **去重检查**:默认会检查数据库中是否已存在相同的资源/权限,避免重复插入
168
+ 2. **UUID 生成**:所有主键(KEY/ID)会自动生成 UUID
169
+ 3. **全局列**:自动填充 `SIGMA`、`APP_ID`、`TENANT_ID`、`CREATED_BY`、`UPDATED_BY`、`CREATED_AT`、`UPDATED_AT`
170
+ 4. **模板保持**:生成的 Excel 保留模板的所有格式(颜色、边框、合并单元格等),仅填充数据
171
+
172
+ ---
173
+
174
+ ## ai ex-crud
175
+
176
+ ### 功能说明
177
+
178
+ 从 `.r2mo/task/command/ex-crud` 目录加载多份 YAML 配置文件,多选后按 metadata 从模板生成 CRUD Excel 及 RBAC 授权,处理成功后移至 `backup` 并加 `.bak` 后缀。
179
+
180
+ ### 命令格式
181
+
182
+ ```bash
183
+ ai ex-crud [选项]
184
+ ```
185
+
186
+ ### 选项
187
+
188
+ | 选项 | 别名 | 类型 | 默认值 | 说明 |
189
+ |------|------|------|--------|------|
190
+ | `--skip` | `-s` | boolean | false | 仅生成 CRUD 文件,跳过数据库与角色选择 |
191
+
192
+ ### 前置条件
193
+
194
+ #### 环境变量(数据库)
195
+
196
+ ```bash
197
+ export Z_DB_TYPE="MYSQL"
198
+ export Z_DB_HOST="127.0.0.1"
199
+ export Z_DB_PORT="3306"
200
+ export Z_DBS_INSTANCE="your_db"
201
+ export Z_DB_APP_USER="username"
202
+ export Z_DB_APP_PASS="password"
203
+ ```
204
+
205
+ #### 环境变量(应用)
206
+
207
+ ```bash
208
+ export Z_APP_ID="app-uuid"
209
+ export Z_TENANT="tenant-id"
210
+ export Z_SIGMA="sigma-key"
211
+ ```
212
+
213
+ ### 配置文件位置
214
+
215
+ 命令会在以下位置查找配置目录(按优先级):
216
+
217
+ 1. `当前目录/.r2mo/task/command/ex-crud`
218
+ 2. `上级目录/.r2mo/task/command/ex-crud`
219
+ 3. `上上级目录/.r2mo/task/command/ex-crud`
220
+
221
+ ### YAML 配置格式
222
+
223
+ 在 `.r2mo/task/command/ex-crud` 目录下创建 YAML 文件(可多个),格式如下:
224
+
225
+ ```yaml
226
+ # 示例:log-crud.yaml
227
+ metadata:
228
+ keyword: "log" # 关键字(必填)
229
+ identifier: "x.log" # 标识符(必填,仅允许字母数字、点、下划线、横线)
230
+ actor: "x-log" # 操作者标识
231
+ name: "日志" # 中文名称
232
+ type: "resource.ambient" # 资源类型
233
+
234
+ # target 配置(可选,用于模块化项目)
235
+ target:
236
+ root: "ZERO_MODULE" # 环境变量名
237
+ module: "ambient" # 模块名
238
+ ```
239
+
240
+ ### 占位符替换规则
241
+
242
+ 模板中的占位符会按以下顺序替换(避免冲突):
243
+
244
+ | 占位符/字面值 | 对应字段 | 说明 | 示例 |
245
+ |--------------|---------|------|------|
246
+ | `x.log` | `identifier` | 标识符(点分隔) | `x.crud` |
247
+ | `x-log` | `actor` | 操作者(横线分隔) | `x-crud` |
248
+ | `log` | `keyword` | 关键字 | `crud` |
249
+ | `日志` | `name` | 中文名称 | `增删改查` |
250
+ | `resource.ambient` | `type` | 资源类型 | `resource.system` |
251
+
252
+ 也支持 `{{identifier}}`、`{{actor}}`、`{{keyword}}`、`{{name}}`、`{{type}}` 形式的占位符。
253
+
254
+ ### 执行流程
255
+
256
+ 1. **扫描配置文件**:从配置目录加载所有 `.yaml` / `.yml` 文件
257
+ 2. **验证 metadata**:检查 `keyword` 和 `identifier` 是否非空且合法
258
+ 3. **用户选择**:通过交互式界面多选要执行的配置
259
+ 4. **环境检查**:验证环境变量(除非使用 `-s` 跳过)
260
+ 5. **生成 CRUD 文件**:
261
+ - 从模板 `src/_template/EXCEL/ex-crud` 复制
262
+ - 替换所有占位符(路径、文件名、文件内容)
263
+ - 重新生成所有 UUID
264
+ - 输出到 `RBAC_CRUD/` 目录
265
+ 6. **收集权限 ID**:从生成的 Excel 中提取 `S_PERMISSION` 表的所有 UUID
266
+ 7. **角色授权**(非 skip 模式):
267
+ - 连接数据库查询 `S_ROLE` 表
268
+ - 用户多选要授权的角色
269
+ - 生成 `falcon-crud-{identifier}.xlsx` 到 `RBAC_ROLE/ADMIN.SUPER/`
270
+ 8. **备份配置**:将处理成功的 YAML 文件移至 `backup/` 并加 `.bak` 后缀
271
+
272
+ ### 输出位置
273
+
274
+ #### 标准项目(ONE 架构)
275
+
276
+ ```
277
+ 项目根目录/
278
+ └── src/main/resources/plugins/
279
+ └── zero-launcher-configuration/
280
+ └── security/
281
+ ├── RBAC_CRUD/
282
+ │ └── {identifier}/ # CRUD 文件(替换后)
283
+ │ ├── {identifier}.xlsx
284
+ │ └── seekSyntax.json
285
+ └── RBAC_ROLE/
286
+ └── ADMIN.SUPER/
287
+ └── falcon-crud-{identifier}.xlsx
288
+ ```
289
+
290
+ #### DPA 架构
291
+
292
+ ```
293
+ 项目根目录/
294
+ └── {artifactId}-api/
295
+ └── src/main/resources/plugins/
296
+ └── zero-launcher-configuration/
297
+ └── security/
298
+ ├── RBAC_CRUD/
299
+ └── RBAC_ROLE/
300
+ ```
301
+
302
+ #### 模块化项目(target 配置)
303
+
304
+ ```
305
+ $ZERO_MODULE/
306
+ └── zero-exmodule-{module}/
307
+ └── zero-exmodule-{module}-domain/
308
+ └── src/main/resources/plugins/
309
+ └── zero-exmodule-{module}/
310
+ └── security/
311
+ ├── RBAC_CRUD/
312
+ └── RBAC_ROLE/
313
+ ```
314
+
315
+ ### 使用示例
316
+
317
+ ```bash
318
+ # 标准执行(生成 CRUD + 角色授权)
319
+ ai ex-crud
320
+
321
+ # 仅生成 CRUD 文件,跳过数据库和角色选择
322
+ ai ex-crud -s
323
+ ai ex-crud --skip
324
+ ```
325
+
326
+ ### 注意事项
327
+
328
+ 1. **metadata 必填**:`keyword` 和 `identifier` 必须非空
329
+ 2. **identifier 格式**:仅允许字母数字、点(`.`)、下划线(`_`)、横线(`-`)
330
+ 3. **UUID 重新生成**:模板中所有 UUID 会被替换为新生成的 UUID
331
+ 4. **Excel 单元格替换**:`.xlsx` 文件使用 ExcelJS 按单元格替换,保留格式
332
+ 5. **角色默认值**:如果未选择角色,会自动选择 `超级管理员`(NAME 或 CODE 为 `ADMIN.SUPER` / `ADMIN_SUPER`)
333
+
334
+ ---
335
+
336
+ ## ai ex-perm
337
+
338
+ ### 功能说明
339
+
340
+ 按参考角色复制权限到指定角色。从固定的参考角色(`e501b47a-c08b-4c83-b12b-95ad82873e96`)的 `R_ROLE_PERM` 表中读取所有权限,复制到用户指定的目标角色。
341
+
342
+ ### 命令格式
343
+
344
+ ```bash
345
+ ai ex-perm -r <角色名或角色CODE>
346
+ ai ex-perm --role <角色名或角色CODE>
347
+ ```
348
+
349
+ ### 选项
350
+
351
+ | 选项 | 别名 | 类型 | 说明 |
352
+ |------|------|------|------|
353
+ | `--role` | `-r` | string | 角色名或角色 CODE,对应 `S_ROLE.NAME` 或 `S_ROLE.CODE`(必填) |
354
+
355
+ ### 前置条件
356
+
357
+ #### 环境变量(数据库)
358
+
359
+ 必须设置以下环境变量(可在 `.r2mo/app.env` 中 export):
360
+
361
+ ```bash
362
+ export Z_DB_TYPE="MYSQL" # 数据库类型
363
+ export Z_DB_HOST="127.0.0.1" # 数据库主机
364
+ export Z_DB_PORT="3306" # 数据库端口
365
+ export Z_DBS_INSTANCE="your_db" # 业务数据库实例名
366
+ export Z_DB_APP_USER="username" # 数据库用户
367
+ export Z_DB_APP_PASS="password" # 数据库密码
368
+ ```
369
+
370
+ ### app.env 文件位置
371
+
372
+ 命令会在以下位置查找 `app.env` 文件(按优先级):
373
+
374
+ #### ONE 架构
375
+
376
+ ```
377
+ 当前目录/.r2mo/app.env
378
+ ```
379
+
380
+ #### DPA 架构
381
+
382
+ ```
383
+ 当前目录/.r2mo/app.env
384
+
385
+ 当前目录/{artifactId}-api/.r2mo/app.env
386
+
387
+ 上级目录/{artifactId}-api/.r2mo/app.env
388
+ ```
389
+
390
+ 其中 `{artifactId}` 从 `pom.xml` 中解析,或使用当前目录名。
391
+
392
+ ### 执行流程
393
+
394
+ 1. **解析参数**:获取 `-r` / `--role` 参数(角色名或 CODE)
395
+ 2. **加载环境变量**:从 `.r2mo/app.env` 加载数据库配置
396
+ 3. **环境检查**:验证数据库环境变量是否齐全
397
+ 4. **连接数据库**:建立数据库连接
398
+ 5. **查询目标角色**:在 `S_ROLE` 表中按 `NAME` 或 `CODE` 匹配角色
399
+ 6. **查询参考角色权限**:从 `R_ROLE_PERM` 表读取参考角色的所有权限
400
+ 7. **复制权限**:将参考角色的权限复制到目标角色(使用 `INSERT IGNORE` 避免重复)
401
+ 8. **输出报告**:显示详细的执行报告
402
+
403
+ ### 使用示例
404
+
405
+ ```bash
406
+ # 按角色名称复制权限
407
+ ai ex-perm -r 管理员
408
+ ai ex-perm --role 管理员
409
+
410
+ # 按角色 CODE 复制权限
411
+ ai ex-perm -r ADMIN
412
+ ai ex-perm --role ADMIN.SUPER
413
+ ```
414
+
415
+ ### 执行报告示例
416
+
417
+ ```
418
+ ----------------------------------------
419
+ ai perm 执行报告
420
+ ----------------------------------------
421
+ ⚙️ 环境
422
+ app.env : /path/to/.r2mo/app.env
423
+ 数据库类型 : MYSQL
424
+ 数据库实例 : your_db
425
+ 连接地址 : 127.0.0.1:3306
426
+ 数据库用户 : username
427
+ 👤 目标角色(-r 指定)
428
+ 输入 : 管理员
429
+ ID : abc-123-def-456
430
+ NAME : 管理员
431
+ CODE : ADMIN
432
+ 📋 参考角色(复制来源)
433
+ ROLE_ID : e501b47a-c08b-4c83-b12b-95ad82873e96
434
+ R_ROLE_PERM 条数 : 150
435
+ ✅ 权限复制结果
436
+ 本次插入 : 120 条
437
+ 重复跳过 : 30 条
438
+ 合计处理 : 150 条
439
+ ----------------------------------------
440
+ ```
441
+
442
+ ### 注意事项
443
+
444
+ 1. **参考角色固定**:参考角色 ID 硬编码为 `e501b47a-c08b-4c83-b12b-95ad82873e96`
445
+ 2. **去重机制**:使用 `INSERT IGNORE` 避免重复插入,已存在的权限会被跳过
446
+ 3. **角色匹配**:支持按 `NAME` 或 `CODE` 匹配,优先匹配第一条记录
447
+ 4. **环境变量来源**:可以从 `.r2mo/app.env` 文件加载,也可以在当前 shell 中已 export
448
+
449
+ ---
450
+
451
+ ## ai ex-app
452
+
453
+ ### 功能说明
454
+
455
+ 清理缓存目录中不存在于数据库的应用实例。从数据库 `X_APP` 表查询所有应用 ID,对比缓存目录(`apps/` 或 `$R2MO_HOME/apps/`),删除数据库中不存在的孤立缓存目录。
456
+
457
+ ### 命令格式
458
+
459
+ ```bash
460
+ ai ex-app
461
+ ```
462
+
463
+ ### 选项
464
+
465
+ 无选项。
466
+
467
+ ### 前置条件
468
+
469
+ #### 环境变量(数据库)
470
+
471
+ 必须设置以下环境变量(可在 `.r2mo/app.env` 中 export):
472
+
473
+ ```bash
474
+ export Z_DBS_INSTANCE="your_db" # 数据库实例名(必填)
475
+ export Z_DB_APP_USER="username" # 数据库用户(必填)
476
+ export Z_DB_APP_PASS="password" # 数据库密码(必填)
477
+ export Z_DB_HOST="127.0.0.1" # 数据库主机(可选,默认 localhost)
478
+ export Z_DB_PORT="3306" # 数据库端口(可选,默认 3306)
479
+ ```
480
+
481
+ #### 环境变量(缓存目录)
482
+
483
+ ```bash
484
+ export R2MO_HOME="/path/to/r2mo" # R2MO 主目录(可选)
485
+ ```
486
+
487
+ ### 缓存目录位置
488
+
489
+ 命令会在以下位置查找缓存目录(按优先级):
490
+
491
+ 1. `$R2MO_HOME/apps/`(如果设置了 `R2MO_HOME` 环境变量)
492
+ 2. `当前目录/apps/`(默认)
493
+
494
+ ### 执行流程
495
+
496
+ 1. **加载环境变量**:从 `.r2mo/app.env` 加载数据库配置
497
+ 2. **环境检查**:验证数据库核心环境变量(`Z_DBS_INSTANCE`、`Z_DB_APP_USER`、`Z_DB_APP_PASS`)
498
+ 3. **连接数据库**:建立数据库连接
499
+ 4. **查询应用 ID**:从 `X_APP` 表提取所有应用 ID
500
+ 5. **扫描缓存目录**:列出缓存目录中的所有子目录
501
+ 6. **识别孤立目录**:对比数据库 ID,找出不存在于数据库的缓存目录
502
+ 7. **用户确认**:显示孤立目录列表,询问是否删除
503
+ 8. **删除目录**:递归删除用户确认的孤立目录
504
+ 9. **输出报告**:显示删除结果(成功/失败数量)
505
+
506
+ ### 使用示例
507
+
508
+ ```bash
509
+ # 执行清理
510
+ ai ex-app
511
+ ```
512
+
513
+ ### 执行流程示例
514
+
515
+ ```
516
+ ✓ 已加载环境变量:/path/to/.r2mo/app.env
517
+ ✓ 环境变量检查通过:Z_DBS_INSTANCE, Z_DB_APP_USER, Z_DB_APP_PASS
518
+ 连接数据库:your_db @ 127.0.0.1:3306(用户 username)
519
+ 查询 X_APP 表,提取所有应用 ID…
520
+ ✓ 数据库中共有 5 个应用:app-001, app-002, app-003, app-004, app-005
521
+ 使用当前目录缓存:/path/to/project/apps
522
+ ✓ 缓存目录中共有 7 个子目录
523
+ 发现 2 个孤立的缓存目录(数据库中不存在):
524
+ - app-old-001 (/path/to/project/apps/app-old-001)
525
+ - app-old-002 (/path/to/project/apps/app-old-002)
526
+ ? 确认删除以上 2 个孤立的缓存目录? (y/N)
527
+ ```
528
+
529
+ ### 注意事项
530
+
531
+ 1. **安全确认**:删除前会显示孤立目录列表并要求用户确认
532
+ 2. **递归删除**:会递归删除整个目录及其所有内容
533
+ 3. **缓存目录优先级**:优先使用 `R2MO_HOME`,其次使用当前目录
534
+ 4. **数据库表**:依赖 `X_APP` 表的 `id` 列
535
+ 5. **目录名匹配**:缓存目录名必须与数据库中的应用 ID 完全一致
536
+
537
+ ---
538
+
539
+ ## 通用说明
540
+
541
+ ### app.env 文件格式
542
+
543
+ `.r2mo/app.env` 文件使用 shell export 语法:
544
+
545
+ ```bash
546
+ # 数据库配置
547
+ export Z_DB_TYPE="MYSQL"
548
+ export Z_DB_HOST="127.0.0.1"
549
+ export Z_DB_PORT="3306"
550
+ export Z_DBS_INSTANCE="your_database"
551
+ export Z_DB_APP_USER="your_username"
552
+ export Z_DB_APP_PASS="your_password"
553
+
554
+ # 应用配置
555
+ export Z_APP_ID="your-app-uuid"
556
+ export Z_TENANT="your-tenant-id"
557
+ export Z_SIGMA="your-sigma-key"
558
+
559
+ # 模块化项目(可选)
560
+ export ZERO_MODULE="/path/to/zero-modules"
561
+
562
+ # 缓存目录(可选)
563
+ export R2MO_HOME="/path/to/r2mo"
564
+ ```
565
+
566
+ ### 项目架构类型
567
+
568
+ #### ONE 架构(单体项目)
569
+
570
+ ```
571
+ project-root/
572
+ ├── pom.xml
573
+ ├── .r2mo/
574
+ │ └── app.env
575
+ └── src/main/resources/plugins/
576
+ └── zero-launcher-configuration/
577
+ └── security/
578
+ ```
579
+
580
+ #### DPA 架构(Domain-Driven Architecture)
581
+
582
+ ```
583
+ project-root/
584
+ ├── pom.xml
585
+ ├── {artifactId}-api/
586
+ │ ├── .r2mo/
587
+ │ │ └── app.env
588
+ │ └── src/main/resources/plugins/
589
+ ├── {artifactId}-domain/
590
+ └── {artifactId}-infra/
591
+ ```
592
+
593
+ #### 模块化项目(ZERO_MODULE)
594
+
595
+ ```
596
+ $ZERO_MODULE/
597
+ └── zero-exmodule-{module}/
598
+ ├── pom.xml
599
+ ├── zero-exmodule-{module}-api/
600
+ │ └── .r2mo/
601
+ │ └── app.env
602
+ └── zero-exmodule-{module}-domain/
603
+ └── src/main/resources/plugins/
604
+ └── zero-exmodule-{module}/
605
+ └── security/
606
+ ```
607
+
608
+ ### 数据库表结构
609
+
610
+ #### RBAC 核心表
611
+
612
+ - `S_RESOURCE`:资源表(API 端点)
613
+ - `S_ACTION`:操作表(HTTP 方法)
614
+ - `S_PERMISSION`:权限表(资源 + 操作)
615
+ - `S_PERM_SET`:权限集表(权限分组)
616
+ - `S_ROLE`:角色表
617
+ - `R_ROLE_PERM`:角色权限关系表
618
+
619
+ #### 应用表
620
+
621
+ - `X_APP`:应用实例表
622
+
623
+ ### Excel 模板说明
624
+
625
+ #### {TABLE} 标记格式
626
+
627
+ Excel 模板使用 `{TABLE}` 标记定义数据区域:
628
+
629
+ ```
630
+ 行1: {TABLE} | 表名(如 S_RESOURCE)
631
+ 行2: 中文表头 | 资源标识 | 资源名称 | ...
632
+ 行3: 英文列名 | identifier | name | ...
633
+ 行4+: 数据行
634
+ ```
635
+
636
+ #### 模板位置
637
+
638
+ - `src/_template/EXCEL/ex-api/template-RBAC_RESOURCE.xlsx`
639
+ - `src/_template/EXCEL/ex-api/template-RBAC_ROLE.xlsx`
640
+ - `src/_template/EXCEL/ex-crud/` 目录下的所有文件
641
+
642
+ ### 常见问题
643
+
644
+ #### Q: 找不到 .r2mo/app.env 文件
645
+
646
+ **A:** 确保在项目根目录执行命令,或在 DPA 架构下确保 `{artifactId}-api/.r2mo/app.env` 存在。
647
+
648
+ #### Q: 环境变量不齐
649
+
650
+ **A:** 检查 `.r2mo/app.env` 文件中是否包含所有必需的环境变量,确保使用 `export` 语法。
651
+
652
+ #### Q: 数据库连接失败
653
+
654
+ **A:** 检查数据库配置(主机、端口、用户名、密码)是否正确,确保数据库服务正在运行。
655
+
656
+ #### Q: 角色查询不到
657
+
658
+ **A:** 确保 `S_ROLE` 表中存在该角色,可以执行 `SELECT ID, NAME, CODE FROM S_ROLE;` 查看已有角色。
659
+
660
+ #### Q: 生成的 Excel 找不到
661
+
662
+ **A:** 检查项目架构类型(ONE / DPA / 模块化),确认输出路径是否正确。
663
+
664
+ #### Q: YAML 配置被跳过
665
+
666
+ **A:** 检查 YAML 格式是否正确,`metadata` 字段是否完整,`keyword` 和 `identifier` 是否非空。
667
+
668
+ ---
669
+
670
+ ## 版本信息
671
+
672
+ - 文档版本:1.0.0
673
+ - 适用于:r2mo-init v1.0.80+
674
+ - 最后更新:2026-03-05
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zero-ai",
3
- "version": "1.0.82",
3
+ "version": "1.0.84",
4
4
  "description": "Zero Ecotope AI",
5
5
  "main": "src/ai.js",
6
6
  "bin": {
@@ -0,0 +1,6 @@
1
+ {
2
+ "executor": "executeExMenu",
3
+ "description": "从数据库 X_MENU 表生成角色菜单权限 JSON 文件(NAME 数组 + 层级文本数组)",
4
+ "command": "ex-menu",
5
+ "options": []
6
+ }