# Camunda 流程设计器

## 📋 功能概述

这是一个集成了 **bpmn.js** 和 **Camunda 扩展**的完整流程设计器，支持所有 Camunda BPM 平台的特性。

## 🎯 核心功能

### 1. BPMN 2.0 标准元素
- ✅ **开始事件** - Start Event (空开始、定时器、消息等)
- ✅ **结束事件** - End Event (空结束、错误结束、终止等)
- ✅ **任务** - Task (用户任务、服务任务、脚本任务等)
- ✅ **网关** - Gateway (排他网关、并行网关、包容网关等)
- ✅ **子流程** - Subprocess
- ✅ **调用活动** - Call Activity
- ✅ **边界事件** - Boundary Event
- ✅ **泳道** - Pool & Lane

### 2. Camunda 专属扩展

#### 🔧 任务配置
- **异步执行** - `camunda:asyncBefore` / `camunda:asyncAfter`
- **重试策略** - `camunda:failedJobRetryTimeCycle`
- **执行优先级** - `camunda:jobPriority`
- **外部任务配置** - `camunda:type="external"`, `camunda:topic`

#### 👤 用户任务 (User Task)
- **任务分配** - Assignee (办理人)
- **候选用户** - Candidate Users
- **候选组** - Candidate Groups
- **到期时间** - Due Date
- **跟进时间** - Follow Up Date
- **表单配置** - Form Key / Generated Forms
- **任务监听器** - Task Listeners

#### ⚙️ 服务任务 (Service Task)
- **Java 类** - `camunda:class`
- **表达式** - `camunda:expression`
- **委托表达式** - `camunda:delegateExpression`
- **外部任务** - External Task Configuration
- **连接器** - Connector Configuration

#### 📜 脚本任务 (Script Task)
- **脚本语言** - Groovy, JavaScript, Python 等
- **脚本内容** - Inline Script
- **外部脚本** - Script Resource
- **结果变量** - Result Variable

#### 🔄 监听器
- **执行监听器** - Execution Listeners
  - start, end, take 事件
  - Java 类、表达式、脚本
- **任务监听器** - Task Listeners
  - create, assignment, complete, delete, update 事件

#### 📊 输入/输出参数
- **输入映射** - Input Parameters
- **输出映射** - Output Parameters
- **变量映射** - Variable Mapping

#### 🎨 其他扩展
- **业务规则** - DMN Decision Table Reference
- **条件表达式** - `${expression}` 支持
- **执行变量** - Process Variables
- **表单字段** - Form Fields Configuration

## 🚀 使用指南

### 基础操作
1. **创建元素** - 从左侧面板拖拽元素到画布
2. **连接元素** - 点击元素边缘的圆点连接到其他元素
3. **编辑属性** - 选中元素后在右侧属性面板编辑
4. **删除元素** - 选中元素按 `Delete` 键

### 快捷键
- `Ctrl + Z` - 撤销
- `Ctrl + Y` / `Ctrl + Shift + Z` - 重做
- `Delete` / `Backspace` - 删除选中元素
- `Ctrl + C` - 复制
- `Ctrl + V` - 粘贴
- `Ctrl + A` - 全选
- `Ctrl + Scroll` - 缩放

### 导出
- **导出 XML** - 导出 BPMN 2.0 XML 格式（包含 Camunda 扩展）
- **导出 SVG** - 导出为矢量图片

## 📦 集成的 npm 包

```json
{
  "bpmn-js": "^18.7.0",                    // BPMN 建模器核心
  "bpmn-js-properties-panel": "^5.42.1",  // 属性面板
  "camunda-bpmn-moddle": "^7.0.1"         // Camunda 扩展
}
```

## 🔗 Camunda 后端集成

导出的 BPMN XML 可以直接部署到 Camunda BPM 平台：

```xml
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions 
  xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
  xmlns:camunda="http://camunda.org/schema/1.0/bpmn">
  
  <bpmn:process id="myProcess" isExecutable="true">
    <bpmn:userTask id="Task_1" name="审核任务"
                   camunda:assignee="#{approver}"
                   camunda:candidateGroups="managers">
      <bpmn:extensionElements>
        <camunda:taskListener event="create" 
                              class="com.example.TaskCreateListener" />
      </bpmn:extensionElements>
    </bpmn:userTask>
  </bpmn:process>
  
</bpmn:definitions>
```

## 📖 相关文档

- [Camunda 官方文档](https://docs.camunda.org/)
- [BPMN 2.0 规范](https://www.omg.org/spec/BPMN/2.0/)
- [bpmn-js 文档](https://bpmn.io/toolkit/bpmn-js/)
- [Camunda Modeler 用户指南](https://docs.camunda.org/manual/latest/modeler/camunda-modeler/)

## 💡 最佳实践

1. **流程 ID** - 使用有意义的流程标识符，如 `orderApprovalProcess`
2. **任务命名** - 使用清晰的中文名称，如 "财务审批"、"部门经理审核"
3. **变量命名** - 使用驼峰命名，如 `approvalResult`, `orderAmount`
4. **表达式** - 使用 Spring EL 表达式，如 `${orderAmount > 10000}`
5. **异步执行** - 对耗时任务启用异步执行
6. **错误处理** - 添加边界错误事件处理异常情况
7. **文档注释** - 为重要节点添加文档说明

## 🎨 示例流程

### 请假审批流程
```
开始 → 填写请假申请 → 部门经理审批 → 
  (小于3天) → 结束
  (大于等于3天) → 总经理审批 → 结束
```

### 采购申请流程
```
开始 → 提交采购申请 → 部门审批 → 
  (金额<5000) → 采购执行 → 结束
  (金额>=5000) → 财务审批 → 采购执行 → 结束
```

## 🛠️ 开发提示

### 自定义监听器示例

```java
// Java 监听器
public class TaskCreateListener implements TaskListener {
  @Override
  public void notify(DelegateTask delegateTask) {
    // 任务创建时的逻辑
    System.out.println("Task created: " + delegateTask.getName());
  }
}
```

### 表达式示例

```javascript
// 条件表达式
${amount > 1000 && status == 'pending'}

// 分配表达式
${userService.getApprover(department)}

// 执行监听器表达式
${execution.setVariable('startTime', now())}
```

## 🔍 故障排除

### 问题：导出的 XML 缺少 Camunda 命名空间
**解决**：检查 XML 根元素是否包含 `xmlns:camunda="http://camunda.org/schema/1.0/bpmn"`

### 问题：属性面板不显示 Camunda 扩展属性
**解决**：确保正确安装了 `camunda-bpmn-moddle` 并在建模器配置中添加了扩展

### 问题：流程无法在 Camunda 中执行
**解决**：
1. 确保 `isExecutable="true"`
2. 检查流程 ID 是否正确
3. 验证所有表达式语法是否正确

## 📞 支持

如有问题，请参考：
- Camunda 社区论坛：https://forum.camunda.io/
- bpmn.io 社区：https://forum.bpmn.io/

