## 引擎工作機制
在本章節中,會詳細講解基本的實現原理,即流程引擎如何將配置數據轉化為實例數據。
******
### 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. 調用業務接口以及更新業務數據