本次再模擬一個(gè)請(qǐng)假流程:這里我用tom啟動(dòng)一個(gè)請(qǐng)假流程實(shí)例,tom請(qǐng)2.5天假。 tom的部門(mén)主管有l(wèi)ucy和mary世剖,這兩個(gè)主管都可以審批定罢,當(dāng)請(qǐng)假天數(shù)大于3天,要總經(jīng)理審批旁瘫,人事記錄是lili 祖凫,總經(jīng)理是sillyming。
先畫(huà)流程圖:
先填寫(xiě)我們的流程id為:holiday
然后是填寫(xiě)申請(qǐng)表的任務(wù)人
接著部門(mén)主管審批
再到人事存檔
最后總經(jīng)理審批
最后設(shè)置兩條分支線的條件
流程圖就這樣完成酬凳。
然后可以寫(xiě)代碼了蝙场,先建一個(gè)實(shí)體類(lèi)Holiday,實(shí)現(xiàn)Serializable接口
/* 這里我用tom啟動(dòng)一個(gè)請(qǐng)假流程實(shí)例,tom請(qǐng)2.5天假粱年。
* tom的部門(mén)主管有l(wèi)ucy和mary。
* 人事記錄是lili
* 總經(jīng)理是sillyming
* */
public class ActivitiDeployment2 {
? ? public static void main(String[] args){
? ? ? ? //1.創(chuàng)建ProcessEngineConfiguration對(duì)象? 第一個(gè)參數(shù):配置文件名稱(chēng)? 第二個(gè)參數(shù)是配置文件processEngineConfiguration的bean的id
? ? ? ? ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml","processEngineConfiguration");
? ? ? ? //創(chuàng)建ProcesEngine對(duì)象
? ? ? ? ProcessEngine processEngine = configuration.buildProcessEngine();
? ? ? ? //到這里activiti所需要的25張表自動(dòng)生成
//流程部署
//processDeployment(processEngine);
//tom啟動(dòng)一個(gè)流程實(shí)例
//startProcess(processEngine);
//tom任務(wù)查詢(xún)
//List tomTaskList=searchTask(processEngine,"tom");
//tom處理任務(wù)
//disposeTask(processEngine,tomTaskList);
//部門(mén)主管lucy領(lǐng)取任務(wù)
//pickupTask(processEngine,"lucy");
//部門(mén)主管lucy突然想去大便罚拟,為了不耽誤台诗,lucy把任務(wù)給了mary
//connectTask(processEngine,"lucy","mary");
//mary和tom有關(guān)系完箩,就通過(guò)了審批
//completeTask(processEngine,"mary");
? ? }
? ? //流程部署
? ? public static void processDeployment(ProcessEngine processEngine){
? ? ? ? //部署流程定義就是要將上邊繪制的圖形即流程定義(.bpmn)部署在工作流程引擎 activiti 中
//2.得到RepositoryService實(shí)例
? ? ? ? RepositoryService repositoryService = processEngine.getRepositoryService();
? ? ? ? //3.進(jìn)行部署
? ? ? ? Deployment deployment=repositoryService.createDeployment()
? ? ? ? ? ? ? ? .addClasspathResource("diagram/holiday2.bpmn")
? ? ? ? ? ? ? ? .addClasspathResource("diagram/holiday2.png")
? ? ? ? ? ? ? ? .name("請(qǐng)假申請(qǐng)流程")
? ? ? ? ? ? ? ? .deploy();
? ? ? ? //執(zhí)行此操作后 activiti 會(huì)將上邊代碼中指定的 bpm 文件和圖片文件保存在 activiti 數(shù)據(jù)庫(kù)。
//? ? ? ? 受影響的表有:
//? ? ? ? act_re_deployment? 部署信息
//? ? ? ? act_re_procdef? ? 流程定義的一些信息
//? ? ? ? act_ge_bytearray? 流程定義的bpmn文件及png文件
//4.輸出部署的一些信息
? ? ? ? System.out.println(deployment.getName());
? ? ? ? System.out.println(deployment.getId());
? ? }
? ? //啟動(dòng)一個(gè)流程實(shí)例
? ? public static void startProcess(ProcessEngine processEngine){
? ? ? ? Holiday tomHoliday=new Holiday();
? ? ? ? tomHoliday.setTotalDay(2.5F);
? ? ? ? tomHoliday.setLeavePerson("tom");
? ? ? ? tomHoliday.setDeptManager("lucy,mary");
? ? ? ? tomHoliday.setPersonnel("lili");
? ? ? ? tomHoliday.setGeneralManager("sillyming");
? ? ? ? Map<String,Object> map=new HashMap<>();
? ? ? ? map.put("holiday",tomHoliday);
? ? ? ? RuntimeService runtimeService=processEngine.getRuntimeService();
? ? ? ? ProcessInstance processInstance=runtimeService.startProcessInstanceByKey("holiday",map);
? ? ? ? System.out.println(processInstance.getProcessInstanceId());
? ? ? ? System.out.println(processInstance.getId());
? ? ? ? System.out.println("tom開(kāi)啟了一個(gè)請(qǐng)假流程實(shí)例");
? ? }
? ? //任務(wù)查詢(xún)
? ? public static List<String> searchTask(ProcessEngine processEngine,String taskPerson){
? ? ? ? //流程啟動(dòng)后拉队,各各任務(wù)的負(fù)責(zé)人就可以查詢(xún)自己當(dāng)前需要處理的任務(wù)弊知,查詢(xún)出來(lái)的任務(wù)都是該用戶(hù)的待辦任務(wù)。
? ? ? ? TaskService taskService=processEngine.getTaskService();
? ? ? ? List<Task> list=taskService.createTaskQuery()
? ? ? ? ? ? ? ? .processDefinitionKey("holiday")//流程實(shí)例key
? ? ? ? ? ? ? ? .taskAssignee(taskPerson)//查詢(xún)誰(shuí)的任務(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é)人查詢(xún)待辦任務(wù)粱快,選擇任務(wù)進(jìn)行處理秩彤,完成任務(wù)。
? ? ? ? TaskService taskService=processEngine.getTaskService();
? ? ? ? for(String id:list){
? ? ? ? ? ? taskService.complete(id);//任務(wù)id
? ? ? ? ? ? System.out.println("處理任務(wù)id:"+id);
? ? ? ? }
}
? ? public static void pickupTask(ProcessEngine processEngine,String taskPerson){
? ? ? ? TaskService taskService=processEngine.getTaskService();
? ? ? ? Task task=taskService.createTaskQuery()
? ? ? ? ? ? ? ? .processDefinitionKey("holiday")//流程實(shí)例key
? ? ? ? ? ? ? ? .singleResult();
? ? ? ? if(task!=null){
? ? ? ? ? ? taskService.claim(task.getId(),taskPerson);
? ? ? ? ? ? System.out.println(taskPerson+"->領(lǐng)取任務(wù):"+task.getId());
? ? ? ? }
}
? ? public static void connectTask(ProcessEngine processEngine,String taskPerson1,String taskPerson2){
? ? ? ? TaskService taskService=processEngine.getTaskService();
? ? ? ? Task task=taskService.createTaskQuery()
? ? ? ? ? ? ? ? .processDefinitionKey("holiday")//流程實(shí)例key
? ? ? ? ? ? ? ? .taskAssignee(taskPerson1)
? ? ? ? ? ? ? ? .singleResult();
? ? ? ? if(task!=null){
? ? ? ? ? ? //這里如果 taskPerson2為null事哭,則是把任務(wù)歸還
? ? ? ? ? ? taskService.setAssignee(task.getId(),taskPerson2);
? ? ? ? ? ? System.out.println(taskPerson1+"->把任務(wù):"+task.getId()+"->交給:"+taskPerson2);
? ? ? ? }
}
? ? public? static void completeTask(ProcessEngine processEngine,String taskPerson){
? ? ? ? TaskService taskService=processEngine.getTaskService();
? ? ? ? Task task=taskService.createTaskQuery()
? ? ? ? ? ? ? ? .processDefinitionKey("holiday")//流程實(shí)例key
? ? ? ? ? ? ? ? .taskAssignee(taskPerson)
? ? ? ? ? ? ? ? .singleResult();
? ? ? ? if(task!=null){
? ? ? ? ? ? taskService.complete(task.getId());
? ? ? ? ? ? System.out.println(taskPerson+"->完成任務(wù):"+task.getId());
? ? ? ? }
}
}