$npx -y skills add jeecgboot/skills --skill jeecg-systemJeecgBoot 系统主数据查询与管理。Use when user asks to query/create/manage system master data, or says "查询角色", "查询用户", "查询部门", "查询字典", "创建字典", "创建角色", "查岗位", "查职务", "查租户", "查数据源", "查定时任务", "系统主数据", "query roles", "query users", "query depts", "create dict", "create role", "master data". Also
| 1 | # JeecgBoot 系统主数据查询与管理 |
| 2 | |
| 3 | 查询和管理 JeecgBoot 系统中的角色、用户、部门、字典等主数据。遵循"先查后建"原则:优先使用系统已有数据,没有才创建。 |
| 4 | |
| 5 | ## 前置条件 |
| 6 | |
| 7 | 用户必须提供以下信息(或由 AI 引导确认): |
| 8 | |
| 9 | 1. **API 地址**:JeecgBoot 后端地址(如 `https://boot3.jeecg.com/jeecgboot`) |
| 10 | 2. **X-Access-Token**:JWT 登录令牌(从浏览器 F12 获取) |
| 11 | |
| 12 | 如果用户未提供,提示: |
| 13 | > 请提供 JeecgBoot 后端地址和 X-Access-Token(从浏览器 F12 → Network → 任意请求的 Request Headers 中复制)。 |
| 14 | |
| 15 | ## 核心原则:先查后建 |
| 16 | |
| 17 | 在任何 skill(流程设计、表单设计、代码生成等)需要使用主数据时,**必须先查询系统已有数据,确认不存在后才创建新数据**。 |
| 18 | |
| 19 | | 数据类型 | 查询函数 | 创建函数 | 一站式函数 | |
| 20 | |---------|---------|---------|-----------| |
| 21 | | 角色 | `query_roles()` / `find_role()` | `create_role()` | `find_or_create_role()` | |
| 22 | | 角色绑定用户 | — | `add_users_to_role(role_id, user_ids)` | — | |
| 23 | | 审批角色 | `query_approval_roles()` / `find_approval_role()` | `create_approval_role_group()` + `create_approval_role()` | `find_or_create_approval_role()` | |
| 24 | | 审批角色绑定用户 | — | `add_users_to_approval_role(role_id, user_ids)` | — | |
| 25 | | 用户 | `query_users()` / `find_user()` | — | — | |
| 26 | | 部门 | `query_depts()` / `find_dept()` | — | — | |
| 27 | | 岗位 | `query_dept_positions()` | — | — | |
| 28 | | 字典(普通) | `query_dict()` / `search_dict()` / `find_dict()` | `create_dict()` | `find_or_create_dict()` | |
| 29 | | 字典(SQL表) | `query_sql_table_dict()` | — | — | |
| 30 | |
| 31 | ## 使用方式 |
| 32 | |
| 33 | ### 脚本位置 |
| 34 | |
| 35 | - `scripts/system_creator.py` — **通用命令行脚本**(推荐,无需生成临时 .py) |
| 36 | - `scripts/system_utils.py` — 工具库(供其他 skill 脚本 import) |
| 37 | |
| 38 | ### 方式一:通用脚本 + 命令行(推荐) |
| 39 | |
| 40 | **单项查询(直接命令行,无需配置文件):** |
| 41 | |
| 42 | ```bash |
| 43 | SCRIPT="<skill目录>/jeecg-system/scripts/system_creator.py" |
| 44 | API="<api_base>" |
| 45 | TOKEN="eyJ..." |
| 46 | |
| 47 | # 查询角色列表 |
| 48 | python "$SCRIPT" --api-base $API --token $TOKEN --action query-roles |
| 49 | python "$SCRIPT" --api-base $API --token $TOKEN --action query-roles --keyword 经理 |
| 50 | |
| 51 | # 查询用户列表 |
| 52 | python "$SCRIPT" --api-base $API --token $TOKEN --action query-users --keyword 张 |
| 53 | |
| 54 | # 查询部门树 |
| 55 | python "$SCRIPT" --api-base $API --token $TOKEN --action query-depts |
| 56 | python "$SCRIPT" --api-base $API --token $TOKEN --action query-depts --keyword 研发 |
| 57 | |
| 58 | # 查询字典列表 |
| 59 | python "$SCRIPT" --api-base $API --token $TOKEN --action query-dicts --keyword 请假 |
| 60 | |
| 61 | # 查询字典项 |
| 62 | python "$SCRIPT" --api-base $API --token $TOKEN --action query-dict --code sex |
| 63 | |
| 64 | # 查询职务列表 |
| 65 | python "$SCRIPT" --api-base $API --token $TOKEN --action query-positions |
| 66 | |
| 67 | # 查询部门+岗位树 |
| 68 | python "$SCRIPT" --api-base $API --token $TOKEN --action query-dept-positions |
| 69 | |
| 70 | # 查询审批角色 |
| 71 | python "$SCRIPT" --api-base $API --token $TOKEN --action query-approval-roles |
| 72 | |
| 73 | # 查询租户列表 |
| 74 | python "$SCRIPT" --api-base $API --token $TOKEN --action query-tenants |
| 75 | |
| 76 | # 查询数据源 |
| 77 | python "$SCRIPT" --api-base $API --token $TOKEN --action query-datasources |
| 78 | |
| 79 | # 查询定时任务 |
| 80 | python "$SCRIPT" --api-base $API --token $TOKEN --action query-quartz-jobs |
| 81 | |
| 82 | # 查询分类字典 |
| 83 | python "$SCRIPT" --api-base $API --token $TOKEN --action query-categories --code B01 |
| 84 | |
| 85 | # 输出结果到 JSON 文件 |
| 86 | python "$SCRIPT" --api-base $API --token $TOKEN --action query-roles --output roles.json |
| 87 | ``` |
| 88 | |
| 89 | **批量查找/创建(JSON 配置文件):** |
| 90 | |
| 91 | ```bash |
| 92 | # 1. Write 工具写入 JSON 配置文件 |
| 93 | # 2. 执行脚本 |
| 94 | python "$SCRIPT" --api-base $API --token $TOKEN --config master_data.json |
| 95 | # 3. 删除临时 JSON 文件 |
| 96 | ``` |
| 97 | |
| 98 | **JSON 配置格式:** |
| 99 | |
| 100 | ```json |
| 101 | { |
| 102 | "roles": [ |
| 103 | {"roleName": "部门经理", "roleCode": "dept_manager"}, |
| 104 | {"roleName": "HR专员", "roleCode": "hr"} |
| 105 | ], |
| 106 | "dicts": [ |
| 107 | { |
| 108 | "dictCode": "leave_type", |
| 109 | "dictName": "请假类型", |
| 110 | "items": [ |
| 111 | {"value": "1", "text": "事假"}, |
| 112 | {"value": "2", "text": "病假"}, |
| 113 | {"value": "3", "text": "年假"} |
| 114 | ] |
| 115 | } |
| 116 | ], |
| 117 | "users": [ |
| 118 | {"keyword": "admin"}, |
| 119 | {"username": "zhangsan"} |
| 120 | ], |
| 121 | "depts": [ |
| 122 | {"keyword": "研发部"}, |
| 123 | {"departName": "人力资源部"} |
| 124 | ], |
| 125 | "positions": [ |
| 126 | {"keyword": "总经理"} |
| 127 | ] |
| 128 | } |
| 129 | ``` |
| 130 | |
| 131 | 脚本自动完成: |
| 132 | - 角色/字典:先查后建(已有则跳过,没有则创建) |
| 133 | - 用户/部门/职务:只查不建(返回查询结果) |
| 134 | - 汇总输出所有查找/创建结果 |
| 135 | - 可通过 `--output result.json` 保存结果 |
| 136 | |
| 137 | ### 方式二:在临时脚本中 import 工具库 |
| 138 | |
| 139 | ```python |
| 140 | import sys, os |
| 141 | sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'jeecg-system', 'scripts')) |
| 142 | # 或直接用绝对路径: sys.path.insert(0, r'<skill目录>/jeecg-system/scripts') |
| 143 | from system_utils import * |
| 144 | |
| 145 | init_api('<api_base>', '<token>') |
| 146 | |
| 147 | # ====== 角色 ====== |
| 148 | # 查询所有角色 |
| 149 | roles = query_roles() |
| 150 | # 按名称模糊查询 |
| 151 | roles = query_roles(keyword='经理') |
| 152 | # 查找单个角色 |
| 153 | role = find_role('manager') # 按编码或名称 |
| 154 | # 查找或创建(推荐) |
| 155 | role_code = find_or_create_role('项目经理', 'project_manager') |
| 156 | |
| 157 | # ====== 用户 ====== |
| 158 | # 查询用户列表 |
| 159 | users = query_users(keyword='张') |
| 160 | users = query_users(username='admin') |
| 161 | # 查找单个用户 |
| 162 | user = find_user('admin') # 按用户名或姓名 |
| 163 | |
| 164 | # ====== 部门 ====== |
| 165 | # 查询部门树 |
| 166 | depts = query_depts() |
| 167 | depts = query_depts(keyword='研发') |
| 168 | # 查找单个部门 |
| 169 | dept = find_dept('研发部') |
| 170 | # 查询部门+岗位树 |
| 171 | positions = query_dept_positions() |
| 172 | |
| 173 | # ====== 字典 ====== |
| 174 | # 查询字典项(普通字典,通过 /sys/api/getDictItems) |
| 175 | items = query_dict('sex') # → [{'val |