ai-engineering-init 1.4.2 → 1.5.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 (132) hide show
  1. package/.claude/skills/leniu-java-export/SKILL.md +389 -95
  2. package/.codex/skills/leniu-java-export/SKILL.md +389 -95
  3. package/.cursor/skills/bug-detective/SKILL.md +19 -19
  4. package/.cursor/skills/leniu-java-export/SKILL.md +389 -95
  5. package/.cursor/skills/project-navigator/SKILL.md +164 -258
  6. package/package.json +7 -1
  7. package/scripts/build-skills.js +180 -0
  8. package/src/platform-map.json +56 -0
  9. package/src/skills/add-skill/SKILL.md +488 -0
  10. package/src/skills/add-todo/SKILL.md +269 -0
  11. package/src/skills/api-development/SKILL.md +266 -0
  12. package/src/skills/architecture-design/SKILL.md +262 -0
  13. package/src/skills/backend-annotations/SKILL.md +302 -0
  14. package/src/skills/banana-image/CHANGELOG.md +37 -0
  15. package/src/skills/banana-image/README.md +146 -0
  16. package/src/skills/banana-image/SKILL.md +171 -0
  17. package/src/skills/banana-image/assets/logo.png +0 -0
  18. package/src/skills/banana-image/references/advanced-usage.md +189 -0
  19. package/src/skills/banana-image/scripts/apply_template.py +125 -0
  20. package/src/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  21. package/src/skills/banana-image/scripts/batch_prep.py +82 -0
  22. package/src/skills/banana-image/scripts/package-lock.json +1437 -0
  23. package/src/skills/banana-image/scripts/package.json +18 -0
  24. package/src/skills/banana-image/scripts/requirements.txt +10 -0
  25. package/src/skills/banana-image/templates/poster.json +22 -0
  26. package/src/skills/banana-image/templates/product.json +17 -0
  27. package/src/skills/banana-image/templates/social.json +22 -0
  28. package/src/skills/banana-image/templates/thumbnail.json +17 -0
  29. package/src/skills/brainstorm/SKILL.md +216 -0
  30. package/src/skills/bug-detective/SKILL.md +256 -0
  31. package/src/skills/bug-detective/references/error-patterns.md +242 -0
  32. package/src/skills/check/SKILL.md +367 -0
  33. package/src/skills/code-patterns/SKILL.md +280 -0
  34. package/src/skills/code-patterns/references/leniu-code-patterns.md +87 -0
  35. package/src/skills/codex-code-review/SKILL.md +135 -0
  36. package/src/skills/collaborating-with-codex/SKILL.md +174 -0
  37. package/src/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  38. package/src/skills/collaborating-with-gemini/SKILL.md +194 -0
  39. package/src/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  40. package/src/skills/crud/SKILL.md +265 -0
  41. package/src/skills/crud-development/SKILL.md +409 -0
  42. package/src/skills/data-permission/SKILL.md +292 -0
  43. package/src/skills/data-permission/references/custom-data-scope.md +90 -0
  44. package/src/skills/database-ops/SKILL.md +407 -0
  45. package/src/skills/dev/SKILL.md +187 -0
  46. package/src/skills/error-handler/SKILL.md +371 -0
  47. package/src/skills/file-oss-management/SKILL.md +255 -0
  48. package/src/skills/file-oss-management/references/entities.md +105 -0
  49. package/src/skills/file-oss-management/references/service-impl.md +104 -0
  50. package/src/skills/git-workflow/SKILL.md +397 -0
  51. package/src/skills/init-docs/SKILL.md +194 -0
  52. package/src/skills/json-serialization/SKILL.md +357 -0
  53. package/src/skills/leniu-api-development/SKILL.md +319 -0
  54. package/src/skills/leniu-api-development/references/real-examples.md +273 -0
  55. package/src/skills/leniu-architecture-design/SKILL.md +383 -0
  56. package/src/skills/leniu-backend-annotations/SKILL.md +277 -0
  57. package/src/skills/leniu-brainstorm/SKILL.md +242 -0
  58. package/src/skills/leniu-brainstorm/references/business-scenarios.md +162 -0
  59. package/src/skills/leniu-code-patterns/SKILL.md +411 -0
  60. package/src/skills/leniu-crud-development/SKILL.md +404 -0
  61. package/src/skills/leniu-crud-development/references/templates.md +597 -0
  62. package/src/skills/leniu-customization-location/SKILL.md +410 -0
  63. package/src/skills/leniu-data-permission/SKILL.md +341 -0
  64. package/src/skills/leniu-database-ops/SKILL.md +426 -0
  65. package/src/skills/leniu-error-handler/SKILL.md +462 -0
  66. package/src/skills/leniu-java-amount-handling/SKILL.md +461 -0
  67. package/src/skills/leniu-java-code-style/SKILL.md +510 -0
  68. package/src/skills/leniu-java-concurrent/SKILL.md +400 -0
  69. package/src/skills/leniu-java-entity/SKILL.md +237 -0
  70. package/src/skills/leniu-java-entity/references/templates.md +237 -0
  71. package/src/skills/leniu-java-export/SKILL.md +570 -0
  72. package/src/skills/leniu-java-logging/SKILL.md +229 -0
  73. package/src/skills/leniu-java-logging/references/data-mask.md +46 -0
  74. package/src/skills/leniu-java-logging/references/logging-scenarios.md +113 -0
  75. package/src/skills/leniu-java-mq/SKILL.md +338 -0
  76. package/src/skills/leniu-java-mybatis/SKILL.md +267 -0
  77. package/src/skills/leniu-java-mybatis/references/report-mapper.md +88 -0
  78. package/src/skills/leniu-java-report-query-param/SKILL.md +291 -0
  79. package/src/skills/leniu-java-task/SKILL.md +367 -0
  80. package/src/skills/leniu-java-total-line/SKILL.md +196 -0
  81. package/src/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  82. package/src/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  83. package/src/skills/leniu-mealtime/SKILL.md +215 -0
  84. package/src/skills/leniu-redis-cache/SKILL.md +331 -0
  85. package/src/skills/leniu-report-customization/SKILL.md +335 -0
  86. package/src/skills/leniu-report-customization/references/table-fields.md +93 -0
  87. package/src/skills/leniu-report-standard-customization/SKILL.md +328 -0
  88. package/src/skills/leniu-report-standard-customization/references/analysis-module.md +64 -0
  89. package/src/skills/leniu-report-standard-customization/references/table-fields.md +113 -0
  90. package/src/skills/leniu-security-guard/SKILL.md +306 -0
  91. package/src/skills/leniu-utils-toolkit/SKILL.md +380 -0
  92. package/src/skills/mysql-debug/SKILL.md +364 -0
  93. package/src/skills/next/SKILL.md +137 -0
  94. package/src/skills/openspec-apply-change/SKILL.md +165 -0
  95. package/src/skills/openspec-archive-change/SKILL.md +122 -0
  96. package/src/skills/openspec-bulk-archive-change/SKILL.md +254 -0
  97. package/src/skills/openspec-continue-change/SKILL.md +126 -0
  98. package/src/skills/openspec-explore/SKILL.md +299 -0
  99. package/src/skills/openspec-ff-change/SKILL.md +109 -0
  100. package/src/skills/openspec-new-change/SKILL.md +82 -0
  101. package/src/skills/openspec-onboard/SKILL.md +414 -0
  102. package/src/skills/openspec-sync-specs/SKILL.md +146 -0
  103. package/src/skills/openspec-verify-change/SKILL.md +176 -0
  104. package/src/skills/performance-doctor/SKILL.md +303 -0
  105. package/src/skills/progress/SKILL.md +193 -0
  106. package/src/skills/project-navigator/SKILL.md +211 -0
  107. package/src/skills/redis-cache/SKILL.md +333 -0
  108. package/src/skills/redis-cache/references/listeners.md +23 -0
  109. package/src/skills/scheduled-jobs/SKILL.md +314 -0
  110. package/src/skills/security-guard/SKILL.md +353 -0
  111. package/src/skills/security-guard/references/encrypt-config.md +103 -0
  112. package/src/skills/security-guard/references/sensitive-strategies.md +42 -0
  113. package/src/skills/sms-mail/SKILL.md +308 -0
  114. package/src/skills/sms-mail/references/mail-config.md +88 -0
  115. package/src/skills/sms-mail/references/sms-config.md +74 -0
  116. package/src/skills/social-login/SKILL.md +266 -0
  117. package/src/skills/social-login/references/provider-configs.md +118 -0
  118. package/src/skills/start/SKILL.md +154 -0
  119. package/src/skills/store-pc/SKILL.md +366 -0
  120. package/src/skills/sync/SKILL.md +149 -0
  121. package/src/skills/task-tracker/SKILL.md +307 -0
  122. package/src/skills/tech-decision/SKILL.md +393 -0
  123. package/src/skills/tenant-management/SKILL.md +288 -0
  124. package/src/skills/tenant-management/references/tenant-scenarios.md +91 -0
  125. package/src/skills/test-development/SKILL.md +301 -0
  126. package/src/skills/test-development/references/parameterized-examples.md +119 -0
  127. package/src/skills/ui-pc/SKILL.md +438 -0
  128. package/src/skills/update-status/SKILL.md +159 -0
  129. package/src/skills/utils-toolkit/SKILL.md +362 -0
  130. package/src/skills/utils-toolkit/references/redis-utils-api.md +56 -0
  131. package/src/skills/websocket-sse/SKILL.md +271 -0
  132. package/src/skills/workflow-engine/SKILL.md +321 -0
@@ -0,0 +1,321 @@
1
+ ---
2
+ name: workflow-engine
3
+ description: |
4
+ 工作流引擎开发、流程管理、任务办理。基于 WarmFlow 实现审批流、业务流程集成。
5
+
6
+ 触发场景:
7
+ - 启动工作流程(发起审批、提交申请)
8
+ - 办理任务(审批通过、驳回、转办、委派)
9
+ - 流程定义管理(设计流程、配置节点)
10
+ - 业务模块集成工作流(订单审批、请假申请)
11
+ - 监听工作流事件(流程状态变更通知)
12
+ - 配置办理人(用户、角色、部门、岗位、SpEL表达式)
13
+
14
+ 触发词:工作流、流程、审批、WarmFlow、FlowEngine、任务、办理、驳回、转办、委派、加签、减签、抄送、流程实例、流程定义、办理人、GlobalListener、ProcessEvent
15
+ ---
16
+
17
+ # 工作流引擎开发规范(WarmFlow)
18
+
19
+ > 基于 **WarmFlow** 实现,架构层次:Controller → Service → WarmFlow Core (FlowEngine) → Mapper → Listener/Handler
20
+
21
+ ## 一、FlowEngine 核心服务
22
+
23
+ ```java
24
+ import org.dromara.warm.flow.core.FlowEngine;
25
+
26
+ FlowEngine.taskService() // 任务服务
27
+ FlowEngine.insService() // 实例服务
28
+ FlowEngine.defService() // 流程定义服务
29
+ FlowEngine.nodeService() // 节点服务
30
+ FlowEngine.hisTaskService() // 历史任务服务
31
+ FlowEngine.userService() // 用户服务
32
+ ```
33
+
34
+ ## 二、关键枚举
35
+
36
+ ### 任务状态 TaskStatusEnum
37
+
38
+ ```java
39
+ package org.dromara.workflow.common.enums;
40
+
41
+ public enum TaskStatusEnum {
42
+ CANCEL("cancel", "撤销"), PASS("pass", "通过"),
43
+ WAITING("waiting", "待审核"), INVALID("invalid", "作废"),
44
+ BACK("back", "退回"), TERMINATION("termination", "终止"),
45
+ TRANSFER("transfer", "转办"), DEPUTE("depute", "委托"),
46
+ COPY("copy", "抄送"), SIGN("sign", "加签"),
47
+ SIGN_OFF("sign_off", "减签"), TIMEOUT("timeout", "超时");
48
+
49
+ // 判断是否为通过或退回
50
+ public static boolean isPassOrBack(String status) { ... }
51
+ }
52
+ ```
53
+
54
+ ### 办理人类型 TaskAssigneeEnum
55
+
56
+ > **注意**:USER 和 SPEL 类型没有前缀!
57
+
58
+ ```java
59
+ public enum TaskAssigneeEnum {
60
+ USER("用户", ""), // 无前缀
61
+ ROLE("角色", "role:"),
62
+ DEPT("部门", "dept:"),
63
+ POST("岗位", "post:"),
64
+ SPEL("SpEL表达式", ""); // 无前缀,通过 $ 或 # 开头判断
65
+
66
+ public static boolean isSpelExpression(String value) {
67
+ return StringUtils.startsWith(value, "$") || StringUtils.startsWith(value, "#");
68
+ }
69
+ }
70
+ ```
71
+
72
+ **storageId 格式**:`123`(用户) | `role:456` | `dept:789` | `post:101` | `#{expr}` | `${var}`
73
+
74
+ ---
75
+
76
+ ## 三、常用操作
77
+
78
+ ### 3.1 启动流程
79
+
80
+ ```java
81
+ @Autowired
82
+ private IFlwTaskService flwTaskService;
83
+
84
+ StartProcessBo bo = new StartProcessBo();
85
+ bo.setFlowCode("leave_apply");
86
+ bo.setBusinessId("order_123");
87
+ bo.setVariables(Map.of("amount", 1000));
88
+ StartProcessReturnDTO result = flwTaskService.startWorkFlow(bo);
89
+ ```
90
+
91
+ ```java
92
+ // 供其他模块调用
93
+ @Autowired
94
+ private WorkflowService workflowService;
95
+
96
+ StartProcessDTO dto = new StartProcessDTO();
97
+ dto.setFlowCode("leave_apply");
98
+ dto.setBusinessId("order_123");
99
+ StartProcessReturnDTO result = workflowService.startWorkFlow(dto);
100
+ ```
101
+
102
+ ### 3.2 办理任务
103
+
104
+ ```java
105
+ CompleteTaskBo bo = new CompleteTaskBo();
106
+ bo.setTaskId(taskId);
107
+ bo.setMessage("同意");
108
+ bo.setVariables(Map.of("approved", true));
109
+ bo.setAssigneeMap(Map.of("pass:nodeCode", "user:1,user:2")); // 可选:指定下一节点办理人
110
+ flwTaskService.completeTask(bo);
111
+ ```
112
+
113
+ ### 3.3 驳回
114
+
115
+ ```java
116
+ BackProcessBo bo = new BackProcessBo();
117
+ bo.setTaskId(taskId);
118
+ bo.setNodeCode("apply_node");
119
+ bo.setMessage("资料不完整");
120
+ flwTaskService.backProcess(bo);
121
+ ```
122
+
123
+ ### 3.4 转办 / 委派 / 加签 / 减签
124
+
125
+ ```java
126
+ TaskOperationBo bo = new TaskOperationBo();
127
+ bo.setTaskId(taskId);
128
+ bo.setUserId("targetUserId");
129
+ bo.setMessage("转交处理");
130
+
131
+ // 转办(转给他人,自己不再参与)
132
+ flwTaskService.taskOperation(bo, FlowConstant.TRANSFER_TASK);
133
+
134
+ // 委派(委托代办,最终还需自己确认)
135
+ flwTaskService.taskOperation(bo, FlowConstant.DELEGATE_TASK);
136
+
137
+ // 加签 / 减签
138
+ bo.setUserIds(List.of("user1", "user2"));
139
+ flwTaskService.taskOperation(bo, FlowConstant.ADD_SIGNATURE);
140
+ flwTaskService.taskOperation(bo, FlowConstant.REDUCTION_SIGNATURE);
141
+ ```
142
+
143
+ ### 3.5 查询任务
144
+
145
+ ```java
146
+ flwTaskService.pageByTaskWait(bo, pageQuery); // 当前用户待办
147
+ flwTaskService.pageByTaskFinish(bo, pageQuery); // 当前用户已办
148
+ flwTaskService.pageByAllTaskWait(bo, pageQuery); // 所有待办(管理员)
149
+ flwTaskService.pageByAllTaskFinish(bo, pageQuery); // 所有已办(管理员)
150
+ flwTaskService.pageByTaskCopy(bo, pageQuery); // 抄送任务
151
+ ```
152
+
153
+ ---
154
+
155
+ ## 四、业务集成 - 事件监听
156
+
157
+ > 事件类位于 `org.dromara.common.core.domain.event` 包
158
+
159
+ | 事件类 | 触发时机 | 主要字段 |
160
+ |-------|---------|---------|
161
+ | `ProcessEvent` | 流程状态变更 | flowCode, businessId, status, submit |
162
+ | `ProcessTaskEvent` | 任务创建 | flowCode, businessId, taskId, nodeCode |
163
+ | `ProcessDeleteEvent` | 流程删除 | flowCode, businessId |
164
+
165
+ ```java
166
+ @Component
167
+ public class OrderWorkflowListener {
168
+
169
+ @EventListener(condition = "#event.flowCode == 'order_approve'")
170
+ public void onProcessEvent(ProcessEvent event) {
171
+ String businessId = event.getBusinessId();
172
+ if (event.isSubmit()) {
173
+ orderService.updateStatus(businessId, "PENDING");
174
+ return;
175
+ }
176
+ switch (event.getStatus()) {
177
+ case "finish" -> orderService.updateStatus(businessId, "APPROVED");
178
+ case "back" -> orderService.updateStatus(businessId, "REJECTED");
179
+ case "cancel" -> orderService.updateStatus(businessId, "CANCELLED");
180
+ case "termination" -> orderService.updateStatus(businessId, "TERMINATED");
181
+ case "invalid" -> orderService.updateStatus(businessId, "INVALID");
182
+ }
183
+ }
184
+
185
+ @EventListener(condition = "#event.flowCode == 'order_approve'")
186
+ public void onTaskCreated(ProcessTaskEvent event) {
187
+ sendNotification(event.getTaskId());
188
+ }
189
+ }
190
+ ```
191
+
192
+ ---
193
+
194
+ ## 五、全局监听器 WorkflowGlobalListener
195
+
196
+ 实现 `GlobalListener` 接口,在任务生命周期关键节点执行:
197
+
198
+ ```java
199
+ @Component
200
+ public class WorkflowGlobalListener implements GlobalListener {
201
+ @Override
202
+ public void create(ListenerVariable var) { /* 任务创建 */ }
203
+
204
+ @Override
205
+ public void start(ListenerVariable var) {
206
+ // 任务开始办理:处理抄送、自定义变量
207
+ String ext = var.getNode().getExt();
208
+ Map<String, Object> variable = var.getVariable();
209
+ }
210
+
211
+ @Override
212
+ public void assignment(ListenerVariable var) {
213
+ // 分派:动态修改待办任务的办理人
214
+ List<Task> nextTasks = var.getNextTasks();
215
+ FlowParams flowParams = var.getFlowParams();
216
+ }
217
+
218
+ @Override
219
+ public void finish(ListenerVariable var) {
220
+ // 完成:状态更新、消息通知、事件发布
221
+ Instance instance = var.getInstance();
222
+ Definition definition = var.getDefinition();
223
+ }
224
+ }
225
+ ```
226
+
227
+ ---
228
+
229
+ ## 六、流程常量 FlowConstant
230
+
231
+ ```java
232
+ package org.dromara.workflow.common.constant;
233
+
234
+ public interface FlowConstant {
235
+ String INITIATOR = "initiator"; // 发起人
236
+ String INITIATOR_DEPT_ID = "initiatorDeptId"; // 发起人部门
237
+ String BUSINESS_ID = "businessId";
238
+ String SUBMIT = "submit"; // 提交标识
239
+
240
+ String DELEGATE_TASK = "delegateTask"; // 委托
241
+ String TRANSFER_TASK = "transferTask"; // 转办
242
+ String ADD_SIGNATURE = "addSignature"; // 加签
243
+ String REDUCTION_SIGNATURE = "reductionSignature"; // 减签
244
+
245
+ String FLOW_COPY_LIST = "flowCopyList"; // 抄送人列表
246
+ String MESSAGE_TYPE = "messageType";
247
+ String MESSAGE_NOTICE = "messageNotice";
248
+ String AUTO_PASS = "autoPass"; // 自动通过
249
+
250
+ String VAR_IGNORE = "ignore"; // 忽略办理权限校验
251
+ String VAR_IGNORE_DEPUTE = "ignoreDepute";
252
+ String VAR_IGNORE_COOPERATE = "ignoreCooperate";
253
+ }
254
+ ```
255
+
256
+ ### 消息通知
257
+
258
+ ```java
259
+ // MessageTypeEnum: "1"=站内信, "2"=邮箱, "3"=短信
260
+ Map<String, Object> variable = new HashMap<>();
261
+ variable.put(FlowConstant.MESSAGE_TYPE, List.of("1", "2"));
262
+ variable.put(FlowConstant.MESSAGE_NOTICE, "您有新的审批任务");
263
+ ```
264
+
265
+ ---
266
+
267
+ ## 七、API 接口速查
268
+
269
+ ### 任务 /workflow/task
270
+
271
+ | 接口 | 方法 | 说明 |
272
+ |------|------|------|
273
+ | `/startWorkFlow` | POST | 启动流程 |
274
+ | `/completeTask` | POST | 办理任务 |
275
+ | `/backProcess` | POST | 驳回 |
276
+ | `/pageByTaskWait` | GET | 当前用户待办 |
277
+ | `/pageByTaskFinish` | GET | 当前用户已办 |
278
+ | `/pageByTaskCopy` | GET | 抄送任务 |
279
+ | `/getNextNodeList` | POST | 下一节点信息 |
280
+ | `/terminationTask` | POST | 终止流程 |
281
+ | `/{taskOperation}` | POST | 委派/转办/加签/减签 |
282
+ | `/urgeTask` | POST | 催办 |
283
+
284
+ ### 实例 /workflow/instance
285
+
286
+ | 接口 | 方法 | 说明 |
287
+ |------|------|------|
288
+ | `/pageByRunning` | GET | 运行中实例 |
289
+ | `/pageByFinish` | GET | 已完成实例 |
290
+ | `/pageByCurrent` | GET | 当前用户发起 |
291
+ | `/cancelProcessApply` | PUT | 撤销申请 |
292
+ | `/invalid` | POST | 作废 |
293
+ | `/flowHisTaskList/{businessId}` | GET | 流程图+审批记录 |
294
+
295
+ ### 定义 /workflow/definition
296
+
297
+ | 接口 | 方法 | 说明 |
298
+ |------|------|------|
299
+ | `/list` | GET | 已发布定义 |
300
+ | `/publish/{id}` | PUT | 发布 |
301
+ | `/unPublish/{id}` | PUT | 取消发布 |
302
+ | `/copy/{id}` | POST | 复制 |
303
+ | `/importDef` | POST | 导入 |
304
+ | `/exportDef/{id}` | POST | 导出 |
305
+
306
+ ---
307
+
308
+ ## 八、核心文件位置
309
+
310
+ ```
311
+ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/
312
+ ├── controller/ # FlwTaskController, FlwInstanceController, FlwDefinitionController
313
+ ├── service/impl/ # FlwTaskServiceImpl, WorkflowServiceImpl
314
+ ├── mapper/ # FlwTaskMapper, FlwInstanceMapper
315
+ ├── listener/ # WorkflowGlobalListener
316
+ ├── handler/ # FlowProcessEventHandler, WorkflowPermissionHandler
317
+ ├── domain/bo/ # StartProcessBo, CompleteTaskBo, BackProcessBo, TaskOperationBo
318
+ ├── domain/vo/ # FlowTaskVo, FlowHisTaskVo, FlowInstanceVo
319
+ ├── common/constant/ # FlowConstant
320
+ └── common/enums/ # TaskStatusEnum, TaskAssigneeEnum, MessageTypeEnum
321
+ ```