## 引擎工作机制
在本章节中,会详细讲解基本的实现原理,即流程引擎如何将配置数据转化为实例数据。
******
### 1、基础配置 - 表单配置
#### 表单配置
| 表单类型 |
| --- |
| 费用报销 |
#### 流程配置
| 流程名称 | 表单类型 |
| --- | --- |
| 销售类费用报销 | 费用报销 |
#### 流程步骤
| 序号 | 步骤名 | 办理人 |
| --- | --- | --- |
| 1 | 直属部门领导审核 | @部门领导 |
| 2 | 财务审核 | @会计 |
> 这里的@xxx等同于一组取值规则,用于匹配流程实例的办理人
### 2、流程发起
流程发起时,系统会根据流程配置读取流程各节点信息以及办理人,同时生成一个流程实例,并且生成对应的流程步骤。
引擎处理动作如下:
1. 流程实例数据插入到 **wf_task** 表中
2. 流程步骤数据插入到 **flow_step** 表中
3. 将当前步骤的执行人数据插入到 **flow_step_partent** 表中
4. 通知第一步的相关办理人
### 3、流程办理
流程办理时,引擎会将流程推送至当前办理人处,办理人进行办理。如果当前步骤属于会签,则需要多个办理人都同意办理才能进入下一步;如果是属于混签,则其中一个办理人同意办理之后推送到下一步。
#### **会签**:
1. 更新办理结果到 **flow_step_partent** 中
2. 判断如果当前步骤还有其他办理人,则不做处理
3. 如果没有其他办理人,将当前步骤数据更新为已处理(对应表 **flow_step**)
4. 在表 **flow_step_partent** 中生成下一步的办理人数据
#### **混签**:
1. 更新办理结果到 **flow_step_partent** 中
2. 将当前步骤数据更新为已处理(对应表 **flow_step**)
3. 在表 **flow_step_partent** 中生成下一步的办理人数据
### 4、流程归档
当所有的流程步骤处理完毕之后,流程结束,流程归档并通知相关办理人。
引擎处理动作如下:
1. 更新流程实例为完成
2. 邮件通知发起人
3. 调用业务接口以及更新业务数据
### 5、流程打回
需要注意的是,在流程实例流转的过程中,只要有一步办理不通过,则整个流程实例会结束。
引擎处理动作如下:
1. 更新流程实例为打回
2. 邮件通知发起人
3. 调用业务接口以及更新业务数据