Activiti7的使用(二)

一個(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);

? ? ? ? }

}

}



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容