pdd-skills 3.0.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.
- package/README.md +1478 -0
- package/bin/pdd.js +354 -0
- package/config/bpmn-rules.yaml +166 -0
- package/config/checkstyle.xml +105 -0
- package/config/eslint.config.js +48 -0
- package/config/pmd.xml +91 -0
- package/config/prd-rules.yaml +113 -0
- package/config/ruff.toml +45 -0
- package/config/sqlfluff.cfg +82 -0
- package/hooks/hook-executor.js +332 -0
- package/index.js +43 -0
- package/lib/api-routes.js +750 -0
- package/lib/api-server.js +408 -0
- package/lib/cache/cache-config.js +209 -0
- package/lib/cache/system-cache.js +852 -0
- package/lib/config-manager.js +373 -0
- package/lib/generate.js +528 -0
- package/lib/grpc/grpc-routes.js +1134 -0
- package/lib/grpc/grpc-server.js +912 -0
- package/lib/grpc/proto-definitions.js +1033 -0
- package/lib/init.js +172 -0
- package/lib/iteration/auto-fixer.js +1025 -0
- package/lib/iteration/auto-reviewer.js +923 -0
- package/lib/iteration/controller.js +577 -0
- package/lib/list.js +130 -0
- package/lib/mcp-server.js +548 -0
- package/lib/openclaw/api-integration.js +535 -0
- package/lib/openclaw/cli-integration.js +567 -0
- package/lib/openclaw/data-sync.js +845 -0
- package/lib/openclaw/openclaw-adapter.js +783 -0
- package/lib/plugin/example-plugins/code-stats/index.js +332 -0
- package/lib/plugin/example-plugins/code-stats/plugin.json +1 -0
- package/lib/plugin/example-plugins/custom-linter/index.js +472 -0
- package/lib/plugin/example-plugins/custom-linter/plugin.json +1 -0
- package/lib/plugin/example-plugins/hello-world/index.js +86 -0
- package/lib/plugin/example-plugins/hello-world/plugin.json +1 -0
- package/lib/plugin/plugin-manager.js +655 -0
- package/lib/plugin/plugin-sdk.js +565 -0
- package/lib/plugin/sandbox.js +627 -0
- package/lib/quality/rules/maintainability.js +418 -0
- package/lib/quality/rules/performance.js +498 -0
- package/lib/quality/rules/readability.js +441 -0
- package/lib/quality/rules/robustness.js +504 -0
- package/lib/quality/rules/security.js +444 -0
- package/lib/quality/scorer.js +576 -0
- package/lib/report.js +669 -0
- package/lib/sdk-base.js +301 -0
- package/lib/sdk-js.js +446 -0
- package/lib/sdk-python/README.md +546 -0
- package/lib/sdk-python/examples/basic_usage.py +450 -0
- package/lib/sdk-python/pdd_sdk/__init__.py +180 -0
- package/lib/sdk-python/pdd_sdk/client.py +1170 -0
- package/lib/sdk-python/pdd_sdk/events.py +423 -0
- package/lib/sdk-python/pdd_sdk/exceptions.py +158 -0
- package/lib/sdk-python/pdd_sdk/models.py +518 -0
- package/lib/sdk-python/pdd_sdk/utils.py +759 -0
- package/lib/token/budget-alert.js +367 -0
- package/lib/token/budget-manager.js +485 -0
- package/lib/update.js +54 -0
- package/lib/utils/logger.js +88 -0
- package/lib/verify.js +741 -0
- package/lib/version.js +52 -0
- package/lib/vm/README.md +102 -0
- package/lib/vm/dashboard/api-routes.js +669 -0
- package/lib/vm/dashboard/server.js +391 -0
- package/lib/vm/dashboard/sse.js +358 -0
- package/lib/vm/dashboard/static/css/dashboard.css +1378 -0
- package/lib/vm/dashboard/static/index.html +118 -0
- package/lib/vm/dashboard/static/js/app.js +949 -0
- package/lib/vm/dashboard/static/js/charts.js +913 -0
- package/lib/vm/dashboard/static/js/kanban-view.js +1053 -0
- package/lib/vm/dashboard/static/js/pipeline-view.js +463 -0
- package/lib/vm/dashboard/static/js/quality-view.js +598 -0
- package/lib/vm/dashboard/static/js/system-view.js +1021 -0
- package/lib/vm/data-provider.js +1191 -0
- package/lib/vm/event-bus.js +402 -0
- package/lib/vm/hooks/extract-hook.js +307 -0
- package/lib/vm/hooks/generate-hook.js +374 -0
- package/lib/vm/hooks/hook-interface.js +458 -0
- package/lib/vm/hooks/report-hook.js +331 -0
- package/lib/vm/hooks/verify-hook.js +454 -0
- package/lib/vm/models.js +1003 -0
- package/lib/vm/reconciler.js +855 -0
- package/lib/vm/scanner.js +988 -0
- package/lib/vm/state-schema.js +955 -0
- package/lib/vm/state-store.js +733 -0
- package/lib/vm/tui/components/card.js +339 -0
- package/lib/vm/tui/components/progress-bar.js +368 -0
- package/lib/vm/tui/components/sparkline.js +327 -0
- package/lib/vm/tui/components/status-light.js +294 -0
- package/lib/vm/tui/components/table.js +370 -0
- package/lib/vm/tui/input.js +335 -0
- package/lib/vm/tui/renderer.js +548 -0
- package/lib/vm/tui/screens/kanban-screen.js +397 -0
- package/lib/vm/tui/screens/overview-screen.js +357 -0
- package/lib/vm/tui/screens/quality-screen.js +336 -0
- package/lib/vm/tui/screens/system-screen.js +379 -0
- package/lib/vm/tui/tui.js +805 -0
- package/package.json +1 -0
- package/scripts/cso-analyzer.js +198 -0
- package/scripts/eval-runner.js +359 -0
- package/scripts/i18n-checker.js +109 -0
- package/scripts/linter/activiti-linter.js +272 -0
- package/scripts/linter/prd-linter.js +162 -0
- package/scripts/linter/report-generator.js +207 -0
- package/scripts/linter/run-linters.js +285 -0
- package/scripts/linter/sql-linter.js +166 -0
- package/scripts/token-analyzer.js +162 -0
- package/scripts/vm-test.js +180 -0
- package/skills/core/official-doc-writer/LICENSE +21 -0
- package/skills/core/official-doc-writer/README.md +232 -0
- package/skills/core/official-doc-writer/SKILL.md +475 -0
- package/skills/core/official-doc-writer/_meta.json +1 -0
- package/skills/core/official-doc-writer/document_generator.py +580 -0
- package/skills/core/official-doc-writer/evals/default-evals.json +1 -0
- package/skills/core/official-doc-writer/examples.md +150 -0
- package/skills/core/official-doc-writer/fonts/FONTS_LIST.md +45 -0
- package/skills/core/official-doc-writer/fonts/README.md +141 -0
- package/skills/core/official-doc-writer/fonts/SIMFANG.TTF +0 -0
- package/skills/core/official-doc-writer/fonts/SIMHEI.TTF +0 -0
- package/skills/core/official-doc-writer/fonts/SIMKAI.TTF +0 -0
- package/skills/core/official-doc-writer/fonts/SIMSUN.TTC +0 -0
- package/skills/core/official-doc-writer/fonts//346/226/271/346/255/243/345/260/217/346/240/207/345/256/213GBK.TTF +0 -0
- package/skills/core/official-doc-writer/references/GBT_9704-2012_/345/205/232/346/224/277/346/234/272/345/205/263/345/205/254/346/226/207/346/240/274/345/274/217.md +422 -0
- package/skills/core/official-doc-writer/scripts/__pycache__/generate_official_doc.cpython-313.pyc +0 -0
- package/skills/core/official-doc-writer/scripts/dialog_manager.py +564 -0
- package/skills/core/official-doc-writer/scripts/generate_official_doc.py +252 -0
- package/skills/core/official-doc-writer/scripts/install_fonts.py +390 -0
- package/skills/core/official-doc-writer/scripts/smart_prompts.py +363 -0
- package/skills/core/pdd-ba/SKILL.md +305 -0
- package/skills/core/pdd-ba/_meta.json +1 -0
- package/skills/core/pdd-ba/evals/default-evals.json +1 -0
- package/skills/core/pdd-code-reviewer/SKILL.md +378 -0
- package/skills/core/pdd-code-reviewer/_meta.json +1 -0
- package/skills/core/pdd-code-reviewer/evals/default-evals.json +1 -0
- package/skills/core/pdd-doc-change/SKILL.md +350 -0
- package/skills/core/pdd-doc-change/_meta.json +1 -0
- package/skills/core/pdd-doc-change/evals/default-evals.json +1 -0
- package/skills/core/pdd-doc-gardener/SKILL.md +248 -0
- package/skills/core/pdd-doc-gardener/_meta.json +1 -0
- package/skills/core/pdd-doc-gardener/evals/default-evals.json +1 -0
- package/skills/core/pdd-entropy-reduction/SKILL.md +360 -0
- package/skills/core/pdd-entropy-reduction/_meta.json +1 -0
- package/skills/core/pdd-entropy-reduction/evals/default-evals.json +1 -0
- package/skills/core/pdd-entropy-reduction/references/entropy-report-template.md +287 -0
- package/skills/core/pdd-entropy-reduction/references/golden-principles.md +573 -0
- package/skills/core/pdd-entropy-reduction/scripts/entropy_scan.py +712 -0
- package/skills/core/pdd-extract-features/SKILL.md +320 -0
- package/skills/core/pdd-extract-features/_meta.json +1 -0
- package/skills/core/pdd-extract-features/evals/default-evals.json +1 -0
- package/skills/core/pdd-generate-spec/SKILL.md +418 -0
- package/skills/core/pdd-generate-spec/_meta.json +1 -0
- package/skills/core/pdd-generate-spec/evals/default-evals.json +1 -0
- package/skills/core/pdd-implement-feature/SKILL.md +332 -0
- package/skills/core/pdd-implement-feature/_meta.json +1 -0
- package/skills/core/pdd-implement-feature/evals/default-evals.json +1 -0
- package/skills/core/pdd-main/SKILL.md +540 -0
- package/skills/core/pdd-main/_meta.json +1 -0
- package/skills/core/pdd-main/evals/default-evals.json +1 -0
- package/skills/core/pdd-main/evals/evals.json +215 -0
- package/skills/core/pdd-verify-feature/SKILL.md +474 -0
- package/skills/core/pdd-verify-feature/_meta.json +1 -0
- package/skills/core/pdd-verify-feature/evals/default-evals.json +1 -0
- package/skills/core/pdd-vm/evals/default-evals.json +1 -0
- package/skills/core/traffic-accident-assessor/LICENSE +29 -0
- package/skills/core/traffic-accident-assessor/SKILL.md +439 -0
- package/skills/core/traffic-accident-assessor/evals/evals.json +1 -0
- package/skills/core/traffic-accident-assessor/references/accident-types.md +369 -0
- package/skills/core/traffic-accident-assessor/references/liability-rules.md +287 -0
- package/skills/core/traffic-accident-assessor/references/traffic-laws.md +226 -0
- package/skills/core/traffic-accident-assessor/references//351/253/230/345/260/224/345/244/253/350/257/264/346/230/216/344/271/246.pdf +32576 -106
- package/skills/core/traffic-accident-assessor/scripts/generate_official_statement.py +588 -0
- package/skills/core/traffic-accident-assessor/scripts/generate_report.py +495 -0
- package/skills/core/traffic-accident-assessor/scripts/generate_statement.py +528 -0
- package/skills/core/traffic-accident-assessor.zip +0 -0
- package/skills/entropy/expert-arch-enforcer/SKILL.md +292 -0
- package/skills/entropy/expert-arch-enforcer/_meta.json +1 -0
- package/skills/entropy/expert-arch-enforcer/evals/default-evals.json +1 -0
- package/skills/entropy/expert-auto-refactor/SKILL.md +327 -0
- package/skills/entropy/expert-auto-refactor/_meta.json +1 -0
- package/skills/entropy/expert-auto-refactor/evals/default-evals.json +1 -0
- package/skills/entropy/expert-code-quality/SKILL.md +468 -0
- package/skills/entropy/expert-code-quality/_meta.json +1 -0
- package/skills/entropy/expert-code-quality/evals/default-evals.json +1 -0
- package/skills/entropy/expert-code-quality/evals/evals.json +109 -0
- package/skills/entropy/expert-code-quality/references/code-smells.md +605 -0
- package/skills/entropy/expert-code-quality/references/design-patterns.md +1111 -0
- package/skills/entropy/expert-code-quality/references/refactoring-catalog.md +1281 -0
- package/skills/entropy/expert-code-quality/references/solid-principles.md +524 -0
- package/skills/entropy/expert-entropy-auditor/SKILL.md +276 -0
- package/skills/entropy/expert-entropy-auditor/_meta.json +1 -0
- package/skills/entropy/expert-entropy-auditor/evals/default-evals.json +1 -0
- package/skills/expert/expert-activiti/SKILL.md +497 -0
- package/skills/expert/expert-activiti/_meta.json +1 -0
- package/skills/expert/expert-mysql/SKILL.md +832 -0
- package/skills/expert/expert-mysql/_meta.json +1 -0
- package/skills/expert/expert-performance/SKILL.md +379 -0
- package/skills/expert/expert-performance/_meta.json +1 -0
- package/skills/expert/expert-performance/evals/default-evals.json +1 -0
- package/skills/expert/expert-ruoyi/SKILL.md +472 -0
- package/skills/expert/expert-ruoyi/_meta.json +1 -0
- package/skills/expert/expert-security/SKILL.md +1341 -0
- package/skills/expert/expert-security/_meta.json +1 -0
- package/skills/expert/expert-security/evals/default-evals.json +1 -0
- package/skills/expert/software-architect/SKILL.md +350 -0
- package/skills/expert/software-architect/_meta.json +1 -0
- package/skills/expert/software-engineer/SKILL.md +437 -0
- package/skills/expert/software-engineer/_meta.json +1 -0
- package/skills/expert/software-engineer/architecture.md +130 -0
- package/skills/expert/software-engineer/patterns.md +151 -0
- package/skills/expert/software-engineer/testing.md +135 -0
- package/skills/expert/system-architect/SKILL.md +628 -0
- package/skills/expert/system-architect/_meta.json +1 -0
- package/skills/expert/system-architect/assets/templates/ARCHITECTURE.md +25 -0
- package/skills/expert/system-architect/assets/templates/README.md +44 -0
- package/skills/expert/system-architect/references/js-ts-standards.md +18 -0
- package/skills/expert/system-architect/references/python-standards.md +19 -0
- package/skills/expert/system-architect/references/scaffolding.md +61 -0
- package/skills/expert/system-architect/references/security-checklist.md +21 -0
- package/skills/openspec/openspec-apply-change/SKILL.md +156 -0
- package/skills/openspec/openspec-apply-change/_meta.json +1 -0
- package/skills/openspec/openspec-archive-change/SKILL.md +114 -0
- package/skills/openspec/openspec-archive-change/_meta.json +1 -0
- package/skills/openspec/openspec-bulk-archive-change/SKILL.md +246 -0
- package/skills/openspec/openspec-bulk-archive-change/_meta.json +1 -0
- package/skills/openspec/openspec-continue-change/SKILL.md +118 -0
- package/skills/openspec/openspec-continue-change/_meta.json +1 -0
- package/skills/openspec/openspec-explore/SKILL.md +288 -0
- package/skills/openspec/openspec-explore/_meta.json +1 -0
- package/skills/openspec/openspec-ff-change/SKILL.md +101 -0
- package/skills/openspec/openspec-ff-change/_meta.json +1 -0
- package/skills/openspec/openspec-new-change/SKILL.md +74 -0
- package/skills/openspec/openspec-new-change/_meta.json +1 -0
- package/skills/openspec/openspec-onboard/SKILL.md +554 -0
- package/skills/openspec/openspec-onboard/_meta.json +1 -0
- package/skills/openspec/openspec-sync-specs/SKILL.md +138 -0
- package/skills/openspec/openspec-sync-specs/_meta.json +1 -0
- package/skills/openspec/openspec-verify-change/SKILL.md +168 -0
- package/skills/openspec/openspec-verify-change/_meta.json +1 -0
- package/skills/pr/pdd-multi-review/SKILL.md +534 -0
- package/skills/pr/pdd-multi-review/_meta.json +1 -0
- package/skills/pr/pdd-pr-batch/SKILL.md +303 -0
- package/skills/pr/pdd-pr-batch/_meta.json +1 -0
- package/skills/pr/pdd-pr-create/SKILL.md +344 -0
- package/skills/pr/pdd-pr-create/_meta.json +1 -0
- package/skills/pr/pdd-pr-merge/SKILL.md +286 -0
- package/skills/pr/pdd-pr-merge/_meta.json +1 -0
- package/skills/pr/pdd-pr-review/SKILL.md +217 -0
- package/skills/pr/pdd-pr-review/_meta.json +1 -0
- package/skills/pr/pdd-task-manager/SKILL.md +636 -0
- package/skills/pr/pdd-task-manager/_meta.json +1 -0
- package/skills/pr/pdd-template-engine/SKILL.md +306 -0
- package/skills/pr/pdd-template-engine/_meta.json +1 -0
- package/templates/behavior-shaping/iron-law-template.md +87 -0
- package/templates/behavior-shaping/rationalization-template.md +62 -0
- package/templates/behavior-shaping/red-flags-template.md +70 -0
- package/templates/bilingual-template.md +139 -0
- package/templates/config/default.yaml +47 -0
- package/templates/project/default/README.md +31 -0
- package/templates/project/frontend/README.md +46 -0
- package/templates/project/java/README.md +48 -0
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: expert-activiti
|
|
3
|
+
description: Activiti工作流引擎专家,精通Activiti 7 Core/Cloud架构和BPMN 2.0规范。当用户涉及工作流设计或流程引擎开发时自动触发。支持中文触发:工作流设计、流程引擎、BPMN建模、Activiti开发。
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Activiti 7.x
|
|
6
|
+
metadata:
|
|
7
|
+
author: "neuqik@hotmail.com"
|
|
8
|
+
version: "2.0"
|
|
9
|
+
triggers:
|
|
10
|
+
- "/activiti" | "/bpmn" | "/workflow"
|
|
11
|
+
- "工作流" | "流程设计" | "BPMN"
|
|
12
|
+
- "流程部署" | "任务管理" | "Activiti"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Activiti工作流引擎专家
|
|
16
|
+
|
|
17
|
+
## 1. 技能概述
|
|
18
|
+
|
|
19
|
+
### 1.1 核心能力
|
|
20
|
+
|
|
21
|
+
```yaml
|
|
22
|
+
核心能力:
|
|
23
|
+
- BPMN建模: BPMN 2.0流程设计与规范
|
|
24
|
+
- 流程引擎: Activiti 7 Core/Cloud架构
|
|
25
|
+
- 流程部署: 流程定义、版本管理
|
|
26
|
+
- 任务管理: 用户任务、候选组、代理规则
|
|
27
|
+
- 表达式: UEL表达式、脚本任务
|
|
28
|
+
|
|
29
|
+
适用场景:
|
|
30
|
+
- 流程设计与建模
|
|
31
|
+
- 流程部署与版本管理
|
|
32
|
+
- 任务查询与办理
|
|
33
|
+
- 流程变量处理
|
|
34
|
+
- 事件与监听器配置
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 1.2 与其他技能协作
|
|
38
|
+
|
|
39
|
+
| 协作技能 | 协作方式 | 传入数据 | 期望输出 |
|
|
40
|
+
|---------|---------|---------|---------|
|
|
41
|
+
| **pdd-implement-feature** | Consultation | 工作流问题 | 解决方案 |
|
|
42
|
+
| **software-architect** | Consultation | 流程架构 | 模块划分建议 |
|
|
43
|
+
|
|
44
|
+
## 2. BPMN 2.0 核心元素
|
|
45
|
+
|
|
46
|
+
### 2.1 流程元素分类
|
|
47
|
+
|
|
48
|
+
```yaml
|
|
49
|
+
流程元素:
|
|
50
|
+
启动事件:
|
|
51
|
+
- Start Event: 流程开始
|
|
52
|
+
- Intermediate Event: 流程中间事件
|
|
53
|
+
- End Event: 流程结束
|
|
54
|
+
|
|
55
|
+
活动:
|
|
56
|
+
- Task: 用户任务
|
|
57
|
+
- Service Task: 服务任务
|
|
58
|
+
- Script Task: 脚本任务
|
|
59
|
+
- Call Activity: 调用活动
|
|
60
|
+
- Subprocess: 子流程
|
|
61
|
+
|
|
62
|
+
网关:
|
|
63
|
+
- Exclusive Gateway: 排他网关
|
|
64
|
+
- Parallel Gateway: 并行网关
|
|
65
|
+
- Inclusive Gateway: 包容网关
|
|
66
|
+
- Event Gateway: 事件网关
|
|
67
|
+
|
|
68
|
+
序列流:
|
|
69
|
+
- Sequential Flow: 顺序流
|
|
70
|
+
- Default Flow: 默认流
|
|
71
|
+
- Conditional Flow: 条件流
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 2.2 BPMN元素速查表
|
|
75
|
+
|
|
76
|
+
| 元素 | XML标签 | 说明 |
|
|
77
|
+
|------|---------|------|
|
|
78
|
+
| 开始事件 | `<startEvent>` | 流程启动点 |
|
|
79
|
+
| 结束事件 | `<endEvent>` | 流程结束点 |
|
|
80
|
+
| 用户任务 | `<userTask>` | 人工处理 |
|
|
81
|
+
| 服务任务 | `<serviceTask>` | 自动处理 |
|
|
82
|
+
| 排他网关 | `<exclusiveGateway>` | 选一分支 |
|
|
83
|
+
| 并行网关 | `<parallelGateway>` | 并行执行 |
|
|
84
|
+
| 顺序流 | `<sequenceFlow>` | 连接元素 |
|
|
85
|
+
|
|
86
|
+
## 3. 快速诊断模式
|
|
87
|
+
|
|
88
|
+
### 3.1 流程部署问题
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
问题: 流程部署失败
|
|
92
|
+
|
|
93
|
+
诊断流程:
|
|
94
|
+
1. 检查 BPMN 文件格式
|
|
95
|
+
- 文件后缀: .bpmn20.xml 或 .bpmn
|
|
96
|
+
- XML必须符合BPMN规范
|
|
97
|
+
|
|
98
|
+
2. 检查流程定义ID
|
|
99
|
+
- 必须唯一
|
|
100
|
+
- 不能使用特殊字符
|
|
101
|
+
|
|
102
|
+
3. 检查 Start Event
|
|
103
|
+
- 每个流程必须有一个Start Event
|
|
104
|
+
- Start Event不能有多个Outgoing Sequence Flow
|
|
105
|
+
|
|
106
|
+
4. 检查 Gateway 条件
|
|
107
|
+
- 排他网关必须设置条件
|
|
108
|
+
- 条件表达式必须正确
|
|
109
|
+
|
|
110
|
+
5. 检查服务任务实现
|
|
111
|
+
- Delegate Expression 指向存在的Bean
|
|
112
|
+
- Class 指向存在的类
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 3.2 任务查询问题
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
问题: 用户看不到待办任务
|
|
119
|
+
|
|
120
|
+
诊断流程:
|
|
121
|
+
1. 检查任务候选用户
|
|
122
|
+
- candidateUser 或 candidateGroup
|
|
123
|
+
- 用户是否在候选组中
|
|
124
|
+
|
|
125
|
+
2. 检查任务 assignee
|
|
126
|
+
- 任务是否已签收
|
|
127
|
+
- 签收用户是否正确
|
|
128
|
+
|
|
129
|
+
3. 检查流程变量
|
|
130
|
+
- 是否设置了正确的候选人
|
|
131
|
+
- 候选人是否正确存储
|
|
132
|
+
|
|
133
|
+
4. 检查权限配置
|
|
134
|
+
- 用户是否有任务查看权限
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## 4. 核心配置规范
|
|
138
|
+
|
|
139
|
+
### 4.1 流程定义部署
|
|
140
|
+
|
|
141
|
+
```java
|
|
142
|
+
// 方式一: 通过 BPMN 文件部署
|
|
143
|
+
@Deployment
|
|
144
|
+
@Test
|
|
145
|
+
public void deploymentTest() {
|
|
146
|
+
repositoryService.createDeployment()
|
|
147
|
+
.name("转让审批流程")
|
|
148
|
+
.key("transfer-approval")
|
|
149
|
+
.addClasspathResource("processes/TransferApproval.bpmn20.xml")
|
|
150
|
+
.deploy();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// 方式二: 通过 ZIP 包部署
|
|
154
|
+
@Deployment
|
|
155
|
+
public void deploymentZipTest() {
|
|
156
|
+
ZipInputStream zipInputStream = new ZipInputStream(
|
|
157
|
+
this.getClass().getClassLoader().getResourceAsStream("processes/diagrams.zip")
|
|
158
|
+
);
|
|
159
|
+
repositoryService.createDeployment()
|
|
160
|
+
.name("转让审批流程")
|
|
161
|
+
.addZipInputStream(zipInputStream)
|
|
162
|
+
.deploy();
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### 4.2 用户任务配置
|
|
167
|
+
|
|
168
|
+
```xml
|
|
169
|
+
<!-- 用户任务完整配置 -->
|
|
170
|
+
<userTask id="approveTask" name="审批任务">
|
|
171
|
+
<!-- 候选用户 -->
|
|
172
|
+
<extensionElements>
|
|
173
|
+
<activiti:potentialOwner>
|
|
174
|
+
<resourceAssignmentExpression>
|
|
175
|
+
<formalExpression>group(manager)</formalExpression>
|
|
176
|
+
</resourceAssignmentExpression>
|
|
177
|
+
</activiti:potentialOwner>
|
|
178
|
+
</extensionElements>
|
|
179
|
+
|
|
180
|
+
<!-- 候选用户 (直接指定) -->
|
|
181
|
+
<extensionElements>
|
|
182
|
+
<activiti:candidateUsers>
|
|
183
|
+
<activiti:resourceAssignmentExpression>
|
|
184
|
+
<formalExpression>user1,user2</formalExpression>
|
|
185
|
+
</resourceAssignmentExpression>
|
|
186
|
+
</activiti:candidateUsers>
|
|
187
|
+
</extensionElements>
|
|
188
|
+
|
|
189
|
+
<!-- 任务监听器 -->
|
|
190
|
+
<activiti:taskListener event="create" delegateExpression="${taskListenerBean}">
|
|
191
|
+
<activiti:field name="action">
|
|
192
|
+
<activiti:expression>${action}</activiti:expression>
|
|
193
|
+
</activiti:field>
|
|
194
|
+
</activiti:taskListener>
|
|
195
|
+
</userTask>
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### 4.3 网关配置
|
|
199
|
+
|
|
200
|
+
```xml
|
|
201
|
+
<!-- 排他网关 (XOR) -->
|
|
202
|
+
<exclusiveGateway id="approvalGateway" name="审批网关" default="defaultFlow">
|
|
203
|
+
<incoming>flow1</incoming>
|
|
204
|
+
<outgoing>flowApproved</outgoing>
|
|
205
|
+
<outgoing>flowRejected</outgoing>
|
|
206
|
+
<outgoing>defaultFlow</outgoing>
|
|
207
|
+
</exclusiveGateway>
|
|
208
|
+
|
|
209
|
+
<sequenceFlow id="flowApproved" sourceRef="approvalGateway" targetRef="approvedTask">
|
|
210
|
+
<conditionExpression xsi:type="tFormalExpression">
|
|
211
|
+
${approved == true}
|
|
212
|
+
</conditionExpression>
|
|
213
|
+
</sequenceFlow>
|
|
214
|
+
|
|
215
|
+
<sequenceFlow id="flowRejected" sourceRef="approvalGateway" targetRef="rejectedTask">
|
|
216
|
+
<conditionExpression xsi:type="tFormalExpression">
|
|
217
|
+
${approved == false}
|
|
218
|
+
</conditionExpression>
|
|
219
|
+
</sequenceFlow>
|
|
220
|
+
|
|
221
|
+
<sequenceFlow id="defaultFlow" sourceRef="approvalGateway" targetRef="defaultTask">
|
|
222
|
+
<!-- 无条件,作为默认路径 -->
|
|
223
|
+
</sequenceFlow>
|
|
224
|
+
|
|
225
|
+
<!-- 并行网关 (AND) -->
|
|
226
|
+
<parallelGateway id="parallelGateway" name="并行网关">
|
|
227
|
+
<incoming>flow1</incoming>
|
|
228
|
+
<outgoing>flowA</outgoing>
|
|
229
|
+
<outgoing>flowB</outgoing>
|
|
230
|
+
</parallelGateway>
|
|
231
|
+
|
|
232
|
+
<parallelGateway id="joinGateway" name="汇聚网关">
|
|
233
|
+
<incoming>flowA</incoming>
|
|
234
|
+
<incoming>flowB</incoming>
|
|
235
|
+
<outgoing>flowEnd</outgoing>
|
|
236
|
+
</parallelGateway>
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### 4.4 服务任务配置
|
|
240
|
+
|
|
241
|
+
```xml
|
|
242
|
+
<!-- 方式一: 调用 Bean 方法 -->
|
|
243
|
+
<serviceTask id="serviceTask1" name="服务任务"
|
|
244
|
+
activiti:delegateExpression="${myDelegateBean}">
|
|
245
|
+
</serviceTask>
|
|
246
|
+
|
|
247
|
+
<!-- 方式二: 调用 Java 类 -->
|
|
248
|
+
<serviceTask id="serviceTask2" name="服务任务"
|
|
249
|
+
activiti:class="com.example.MyDelegate">
|
|
250
|
+
</serviceTask>
|
|
251
|
+
|
|
252
|
+
<!-- 方式三: 表达式 -->
|
|
253
|
+
<serviceTask id="serviceTask3" name="服务任务"
|
|
254
|
+
activiti:expression="${orderService.process(order)}">
|
|
255
|
+
</serviceTask>
|
|
256
|
+
|
|
257
|
+
<!-- 方式四: 脚本任务 -->
|
|
258
|
+
<scriptTask id="scriptTask" name="脚本任务"
|
|
259
|
+
scriptFormat="javascript">
|
|
260
|
+
<script>
|
|
261
|
+
var order = execution.getVariable("order");
|
|
262
|
+
order.setStatus("PROCESSED");
|
|
263
|
+
execution.setVariable("order", order);
|
|
264
|
+
</script>
|
|
265
|
+
</scriptTask>
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## 5. 常见问题解决方案
|
|
269
|
+
|
|
270
|
+
### 5.1 流程部署失败
|
|
271
|
+
|
|
272
|
+
**问题**: BPMN 文件部署失败
|
|
273
|
+
|
|
274
|
+
**排查步骤**:
|
|
275
|
+
```java
|
|
276
|
+
// 检查流程定义
|
|
277
|
+
ProcessDefinition processDefinition = repositoryService
|
|
278
|
+
.createProcessDefinitionQuery()
|
|
279
|
+
.processDefinitionKey("transfer-approval")
|
|
280
|
+
.latestVersion()
|
|
281
|
+
.singleResult();
|
|
282
|
+
|
|
283
|
+
// 检查 XML 语法
|
|
284
|
+
BpmnModel bpmnModel = new BpmnXMLLoader()
|
|
285
|
+
.loadXML(inputStream);
|
|
286
|
+
|
|
287
|
+
// 检查资源文件
|
|
288
|
+
InputStream resource = runtimeService.getProcessEngine()
|
|
289
|
+
.getRepositoryService()
|
|
290
|
+
.getResourceAsStream(deploymentId, "process.bpmn20.xml");
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**解决方案**:
|
|
294
|
+
1. 确保 BPMN XML 语法正确
|
|
295
|
+
2. 检查 Start Event 和 End Event 配置
|
|
296
|
+
3. 验证 Gateway 条件表达式
|
|
297
|
+
4. 确保服务任务指向存在的 Bean/类
|
|
298
|
+
|
|
299
|
+
### 5.2 任务查询为空
|
|
300
|
+
|
|
301
|
+
**问题**: 用户登录后看不到待办任务
|
|
302
|
+
|
|
303
|
+
**排查步骤**:
|
|
304
|
+
```java
|
|
305
|
+
// 查询候选任务 (用户所在组)
|
|
306
|
+
List<Task> candidateTasks = taskService.createTaskQuery()
|
|
307
|
+
.taskCandidateUser("userId")
|
|
308
|
+
.taskCandidateGroup("groupId")
|
|
309
|
+
.list();
|
|
310
|
+
|
|
311
|
+
// 查询已签收任务
|
|
312
|
+
List<Task> assignedTasks = taskService.createTaskQuery()
|
|
313
|
+
.taskAssignee("userId")
|
|
314
|
+
.list();
|
|
315
|
+
|
|
316
|
+
// 查询个人任务
|
|
317
|
+
List<Task> personalTasks = taskService.createTaskQuery()
|
|
318
|
+
.taskOwner("userId")
|
|
319
|
+
.list();
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
**解决方案**:
|
|
323
|
+
1. 确认用户属于正确的候选组
|
|
324
|
+
2. 检查任务的 assignee 和 candidateUser
|
|
325
|
+
3. 验证流程变量中存储的用户/组信息
|
|
326
|
+
4. 使用正确的方式查询任务
|
|
327
|
+
|
|
328
|
+
### 5.3 流程变量获取失败
|
|
329
|
+
|
|
330
|
+
**问题**: 在任务监听器中获取流程变量为null
|
|
331
|
+
|
|
332
|
+
**排查步骤**:
|
|
333
|
+
```java
|
|
334
|
+
// 在任务监听器中获取变量
|
|
335
|
+
public class MyTaskListener implements TaskListener {
|
|
336
|
+
@Override
|
|
337
|
+
public void notify(DelegateTask delegateTask) {
|
|
338
|
+
// 正确方式
|
|
339
|
+
String variable = delegateTask.getVariable("variableName");
|
|
340
|
+
String executionVariable = delegateTask.getExecution().getVariable("variableName");
|
|
341
|
+
|
|
342
|
+
// 设置变量
|
|
343
|
+
delegateTask.setVariable("taskVar", "value");
|
|
344
|
+
delegateTask.getExecution().setVariable("executionVar", "value");
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
**解决方案**:
|
|
350
|
+
1. 确认变量在正确的范围设置 (execution vs task)
|
|
351
|
+
2. 检查变量设置的时机
|
|
352
|
+
3. 使用 TaskListener 的 DelegateTask 获取变量
|
|
353
|
+
4. 使用 Execution 获取流程级别的变量
|
|
354
|
+
|
|
355
|
+
### 5.4 网关条件不生效
|
|
356
|
+
|
|
357
|
+
**问题**: 网关条件判断不正确,流程走向错误
|
|
358
|
+
|
|
359
|
+
**排查步骤**:
|
|
360
|
+
```xml
|
|
361
|
+
<!-- 检查条件表达式格式 -->
|
|
362
|
+
<sequenceFlow id="flow1" sourceRef="gateway" targetRef="task1">
|
|
363
|
+
<conditionExpression xsi:type="tFormalExpression">
|
|
364
|
+
${amount > 1000}
|
|
365
|
+
</conditionExpression>
|
|
366
|
+
</sequenceFlow>
|
|
367
|
+
|
|
368
|
+
<sequenceFlow id="flow2" sourceRef="gateway" targetRef="task2">
|
|
369
|
+
<conditionExpression xsi:type="tFormalExpression">
|
|
370
|
+
${amount <= 1000}
|
|
371
|
+
</conditionExpression>
|
|
372
|
+
</sequenceFlow>
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
**解决方案**:
|
|
376
|
+
1. 使用正确的条件表达式语法 `${condition}`
|
|
377
|
+
2. 排他网关确保有且只有一个条件为true
|
|
378
|
+
3. 设置默认流避免无匹配情况
|
|
379
|
+
4. 检查变量类型和值
|
|
380
|
+
|
|
381
|
+
## 6. 最佳实践清单
|
|
382
|
+
|
|
383
|
+
### 6.1 BPMN建模规范
|
|
384
|
+
|
|
385
|
+
```yaml
|
|
386
|
+
建模规范:
|
|
387
|
+
- [ ] 每个流程有且只有一个Start Event
|
|
388
|
+
- [ ] 每个流程至少有一个End Event
|
|
389
|
+
- [ ] 用户任务必须配置候选用户或候选组
|
|
390
|
+
- [ ] 排他网关必须设置默认流
|
|
391
|
+
- [ ] 服务任务必须指向存在的实现
|
|
392
|
+
- [ ] 流程Key使用 kebab-case (如: transfer-approval)
|
|
393
|
+
- [ ] 流程ID唯一
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### 6.2 流程变量命名
|
|
397
|
+
|
|
398
|
+
```yaml
|
|
399
|
+
命名规范:
|
|
400
|
+
- 使用 camelCase: transferAmount
|
|
401
|
+
- 避免使用保留字: processInstanceId, taskId
|
|
402
|
+
- 前缀区分: biz_业务变量, sys_系统变量
|
|
403
|
+
- 示例: biz_transferId, sys_approver
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### 6.3 异常处理
|
|
407
|
+
|
|
408
|
+
```java
|
|
409
|
+
// 方式一: 边界事件捕获
|
|
410
|
+
<boundaryEvent id="errorBoundary" attachedToRef="serviceTask">
|
|
411
|
+
<errorEventDefinition errorCode="SERVICE_ERROR"/>
|
|
412
|
+
</boundaryEvent>
|
|
413
|
+
|
|
414
|
+
// 方式二: 错误结束事件
|
|
415
|
+
<endEvent id="errorEnd">
|
|
416
|
+
<errorEventDefinition errorCode="VALIDATION_ERROR"/>
|
|
417
|
+
</endEvent>
|
|
418
|
+
|
|
419
|
+
// 方式三: 异常流程变量
|
|
420
|
+
try {
|
|
421
|
+
// 业务逻辑
|
|
422
|
+
} catch (Exception e) {
|
|
423
|
+
execution.setVariable("errorMessage", e.getMessage());
|
|
424
|
+
execution.setVariable("errorCode", "BUSINESS_ERROR");
|
|
425
|
+
}
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
## 7. Guardrails
|
|
429
|
+
|
|
430
|
+
### 7.1 必须遵守
|
|
431
|
+
|
|
432
|
+
- [ ] BPMN文件必须符合BPMN 2.0规范
|
|
433
|
+
- [ ] 每个流程必须有Start Event和End Event
|
|
434
|
+
- [ ] 排他网关必须设置默认流
|
|
435
|
+
- [ ] 用户任务必须配置候选人
|
|
436
|
+
- [ ] 服务任务实现类必须存在
|
|
437
|
+
|
|
438
|
+
### 7.2 避免事项
|
|
439
|
+
|
|
440
|
+
- ❌ 在用户任务中硬编码候选人
|
|
441
|
+
- ❌ 省略End Event
|
|
442
|
+
- ❌ 使用复杂的嵌套网关
|
|
443
|
+
- ❌ 在流程中存储大量数据
|
|
444
|
+
|
|
445
|
+
## 8. 本地开发指南
|
|
446
|
+
|
|
447
|
+
本项目有特定的开发规范和历史经验,请在提供建议时优先参考:
|
|
448
|
+
|
|
449
|
+
### 8.1 项目规则文件
|
|
450
|
+
|
|
451
|
+
| 文件 | 路径 | 内容 |
|
|
452
|
+
|------|------|------|
|
|
453
|
+
| **项目规则** | `.trae/rules/project_rules.md` | 目录结构、命名规范,开发规范 |
|
|
454
|
+
| **经验教训** | `.trae/rules/lessons.md` | 历史问题和解决方案 |
|
|
455
|
+
|
|
456
|
+
### 8.2 本地 Activiti 开发文档
|
|
457
|
+
|
|
458
|
+
项目在 `Asset-Management-Platform/docs/activiti7/` 目录下有完整的中文开发文档:
|
|
459
|
+
|
|
460
|
+
| 文档 | 路径 | 内容 |
|
|
461
|
+
|------|------|------|
|
|
462
|
+
| **Activiti 7 开发指南** | `docs/activiti7/README.md` | 文档索引和概述 |
|
|
463
|
+
| **01-概述** | `docs/activiti7/01-概述.md` | Activiti Cloud 概述 |
|
|
464
|
+
| **02-快速入门** | `docs/activiti7/02-快速入门.md` | 快速入门指南 |
|
|
465
|
+
| **03-组件架构** | `docs/activiti7/03-组件架构.md` | 组件架构说明 |
|
|
466
|
+
| **04-BPMN支持** | `docs/activiti7/04-BPMN支持.md` | BPMN 元素支持 |
|
|
467
|
+
| **05-常见问题** | `docs/activiti7/05-常见问题.md` | 常见问题解答 |
|
|
468
|
+
|
|
469
|
+
### 8.3 项目特定检查项
|
|
470
|
+
|
|
471
|
+
```yaml
|
|
472
|
+
项目特定检查项:
|
|
473
|
+
- [ ] 检查 lessons.md 中是否有相关问题的解决方案
|
|
474
|
+
- [ ] 遵循 project_rules.md 中的命名规范
|
|
475
|
+
- [ ] 参考现有代码的实现模式
|
|
476
|
+
- [ ] 确认数据库配置:mysql6.sqlpub.com:3311/asset_ruoyi
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
## 9. 参考文档
|
|
480
|
+
|
|
481
|
+
### 9.1 本地文档
|
|
482
|
+
|
|
483
|
+
- [Activiti 7 开发指南](Asset-Management-Platform/docs/activiti7/README.md)
|
|
484
|
+
- [后端技术架构](Asset-Management-Platform/docs/architect/02-后端技术架构.md)
|
|
485
|
+
|
|
486
|
+
### 9.2 外部文档
|
|
487
|
+
|
|
488
|
+
- [Activiti 7 Developers Guide](https://activiti.gitbook.io/activiti-7-developers-guide)
|
|
489
|
+
- [BPMN 2.0 规范](https://www.omg.org/spec/BPMN/2.0/)
|
|
490
|
+
|
|
491
|
+
## 10. 版本历史
|
|
492
|
+
|
|
493
|
+
| 版本 | 日期 | 变更内容 |
|
|
494
|
+
|-----|------|---------|
|
|
495
|
+
| 2.1 | 2026-03-22 | 添加本地开发指南和文档引用 |
|
|
496
|
+
| 2.0 | 2026-03-21 | 标准化结构,添加诊断模式,增强协作指导 |
|
|
497
|
+
| 1.0 | 早期 | 初始版本 |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"name": "expert-activiti", "version": "1.0.0", "category": "expert", "description": "Activiti workflow engine expert proficient in Activiti 7 Core/Cloud architecture, BPMN 2.0 specification, process design and development. Invoke this Skill when users need workflow design, BPMN modeling, process engine development, or Activiti deployment management. 支持中文触发:工作流设计、流程引擎、BPMN建模、Activiti开发、流程部署、BPMN流程定义。", "triggers": ["工作流设计", "流程引擎", "BPMN建模", "Activiti开发", "流程部署"]}
|