一個(gè)請假流程:
先畫一個(gè)流程圖,打開IDEA(已經(jīng)安裝Activiti Designer 流程設(shè)計(jì)器),在resources下新建文件夾diagram,在diagram下新建一個(gè)holiday.pbmn,畫板中包括以下結(jié)點(diǎn):
Connection—連接
Event---事件
Task---任務(wù)
Gateway---網(wǎng)關(guān)
Container—容器
Boundary event—邊界事件
Intermediate event- -中間事件
畫好如下圖:

然后將該圖另存為png圖片,具體操作:先復(fù)制holiday.pbmn為holiday.xml文件,然后右擊holiday.xml,
選擇Diagrams,再選擇Show BPMN 2.0 Designer,最后選擇Export?to?file

下面寫代碼開始使用流程:
package com.lxm.activiti;
import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipInputStream;
public class ActivitiDeployment {
? ? public static void main(String[] args){
? ? ? ? //1.創(chuàng)建ProcessEngineConfiguration對象? 第一個(gè)參數(shù):配置文件名稱? 第二個(gè)參數(shù)是配置文件processEngineConfiguration的bean的id
? ? ? ? ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml","processEngineConfiguration");
? ? ? ? //創(chuàng)建ProcesEngine對象
? ? ? ? ProcessEngine processEngine = configuration.buildProcessEngine();
? ? ? ? //流程部署
//processDeployment(processEngine);
//啟動(dòng)一個(gè)流程實(shí)例
//startProcess(processEngine);
//任務(wù)查詢
//List list=searchTask(processEngine);
//處理任務(wù)
//disposeTask(processEngine,list);
? ? }
? ? //流程部署
? ? public static void processDeployment(ProcessEngine processEngine){
? ? ? ? //部署流程定義就是要將上邊繪制的圖形即流程定義(.bpmn)部署在工作流程引擎 activiti 中
//2.得到RepositoryService實(shí)例
? ? ? ? RepositoryService repositoryService = processEngine.getRepositoryService();
? ? ? ? //3.進(jìn)行部署
? ? ? ? Deployment deployment=repositoryService.createDeployment()
? ? ? ? ? ? ? ? .addClasspathResource("diagram/holiday.bpmn")
? ? ? ? ? ? ? ? .addClasspathResource("diagram/holiday.png")
? ? ? ? ? ? ? ? .name("請假申請流程")
? ? ? ? ? ? ? ? .deploy();
? ? ? ? //執(zhí)行此操作后 activiti 會(huì)將上邊代碼中指定的 bpm 文件和圖片文件保存在 activiti 數(shù)據(jù)庫。
//? ? ? ? 受影響的表有:
//? ? ? ? act_re_deployment? 部署信息
//? ? ? ? act_re_procdef? ? 流程定義的一些信息
//? ? ? ? act_ge_bytearray? 流程定義的bpmn文件及png文件
//4.輸出部署的一些信息
? ? ? ? System.out.println(deployment.getName());
? ? ? ? System.out.println(deployment.getId());
? ? }
? ? //流程部署壓縮包方式,把holiday.bpmn和holiday.png打包成holiday.zip
? ? public static void processDeploymentByZip(ProcessEngine processEngine){
? ? ? ? InputStream inputStream=ActivitiDeployment.class.getClassLoader().getResourceAsStream("diagram/holiday.zip");
? ? ? ? ZipInputStream zipInputStream=new ZipInputStream(inputStream);
? ? ? ? //2.得到RepositoryService實(shí)例
? ? ? ? RepositoryService repositoryService = processEngine.getRepositoryService();
? ? ? ? //3.進(jìn)行部署
? ? ? ? Deployment deployment=repositoryService.createDeployment()
? ? ? ? ? ? ? ? .addZipInputStream(zipInputStream)
? ? ? ? ? ? ? ? .name("請假申請流程")
? ? ? ? ? ? ? ? .deploy();
? ? ? ? //執(zhí)行此操作后 activiti 會(huì)將上邊代碼中指定的 bpm 文件和圖片文件保存在 activiti 數(shù)據(jù)庫。
? ? }
? ? //啟動(dòng)一個(gè)流程實(shí)例
? ? public static void startProcess(ProcessEngine processEngine){
? ? ? ? //流程定義部署在 activiti 后就可以通過工作流管理業(yè)務(wù)流程了,也就是說上邊部署的請假申請流程可以使用了。
//針對該流程,啟動(dòng)一個(gè)流程表示發(fā)起一個(gè)新的請假申請單,這就相當(dāng)于 java 類與 java 對象的關(guān)系,類定義好后需要 new 創(chuàng)建一個(gè)對象使用,當(dāng)然可以 new 多個(gè)對象
? ? ? ? RuntimeService runtimeService=processEngine.getRuntimeService();
? ? ? ? ProcessInstance processInstance=runtimeService.startProcessInstanceByKey("myProcess_1");
? ? ? ? System.out.println(processInstance.getDeploymentId());
? ? ? ? System.out.println(processInstance.getDescription());
? ? ? ? System.out.println(processInstance.getName());
? ? ? ? System.out.println(processInstance.getProcessInstanceId());
? ? ? ? System.out.println(processInstance.getId());
? ? }
? ? //任務(wù)查詢
? ? public static List<String> searchTask(ProcessEngine processEngine){
? ? ? ? //流程啟動(dòng)后,各各任務(wù)的負(fù)責(zé)人就可以查詢自己當(dāng)前需要處理的任務(wù),查詢出來的任務(wù)都是該用戶的待辦任務(wù)。
? ? ? ? TaskService taskService=processEngine.getTaskService();
? ? ? ? List<Task> list=taskService.createTaskQuery()
? ? ? ? ? ? ? ? .processDefinitionKey("myProcess_1")//流程實(shí)例key
//.taskAssignee("")//查詢誰的任務(wù)
? ? ? ? ? ? ? ? .list();
? ? ? ? List<String> idList=new ArrayList<String>();
? ? ? ? for(Task task:list){
? ? ? ? ? ? idList.add(task.getId());
? ? ? ? ? ? System.out.println(task.getId());
? ? ? ? ? ? System.out.println(task.getName());
? ? ? ? ? ? System.out.println(task.getProcessInstanceId());
? ? ? ? }
? ? ? ? return idList;
? ? }
? ? //處理任務(wù)
? ? public static void disposeTask(ProcessEngine processEngine,List<String> list){
? ? ? ? //任務(wù)負(fù)責(zé)人查詢待辦任務(wù),選擇任務(wù)進(jìn)行處理,完成任務(wù)。
? ? ? ? TaskService taskService=processEngine.getTaskService();
? ? ? ? for(String id:list){
? ? ? ? ? ? taskService.complete(id);//任務(wù)id
? ? ? ? ? ? System.out.println("處理任務(wù)id:"+id);
? ? ? ? }
}
}