最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

activiti實現(xiàn)員工請假流程解析

 更新時間:2020年07月28日 10:09:43   作者:fly_fly_fly_pig  
這篇文章主要介紹了activiti實現(xiàn)員工請假流程解析,本文通過實例代碼圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

源碼下載:

http://xiazai.jb51.net/202007/yuanma/FirstActiviti_jb51.rar

鏈接: https://pan.baidu.com/s/1tCN7SDAdEUerZxcTr_9cqA

提取碼: twmp

在開始之前,先說一下剛開始學習工作流的時候遇到的問題,感覺比較困惑,經(jīng)過這兩天的學習,也算有所收獲

1.部署了多個流程變量,如何準確開啟特定的流程
2. 在一個流程的執(zhí)行過程中,怎么確定執(zhí)行到哪一步,即執(zhí)行到哪個任務了
3. 在有多種情況的條件下,怎么判斷要去的方向

先不急著解決,來看看我的工程

工程模擬情況

員工請假流程

  • 員工發(fā)起申請,附帶請假信息(請假幾天)單位領(lǐng)導審批,如果通過,交付經(jīng)理審批,不通過,重新申請經(jīng)理審批,如果請假天數(shù)不超過三天,經(jīng)理1審批
  • 如果請假天數(shù)在3-5天,經(jīng)理3審批
  • 超過5天,經(jīng)理2審批經(jīng)理審批通過,流程結(jié)束,經(jīng)理審批不通過,員工重新申請

流程圖

這里寫圖片描述

領(lǐng)導意見和經(jīng)理意見,用0和1表示,0表示未通過,1表示通過

多種執(zhí)行情況

一.不超過3天,經(jīng)理1審批,同意申請

這里寫圖片描述

二.3-5天,經(jīng)理3審批,同意申請

這里寫圖片描述

三. 5天以上,經(jīng)理2審批,同意申請

這里寫圖片描述

四. 任一環(huán)節(jié)設置不同意,陷入死循環(huán)
情況:請假天數(shù)超過5天,領(lǐng)導同意申請,經(jīng)理2審批,且不同意申請

這里寫圖片描述

我的流程中,是一次執(zhí)行完所有任務,直到流程結(jié)束,剛開始學習的小伙伴肯定很苦惱于這個問題,怎么讓流程自己執(zhí)行下去,我前兩天一直在想這個問題

要解決這個問題,隨之而來的第一個問題是,怎么獲取當前任務,換句話說,就是怎么跟蹤流程

每個流程運行時,都會產(chǎn)生一個進程實例.這是一個ProcessInstance對象,相當于一個實體類,在數(shù)據(jù)庫中有他的信息,而且在這個流程執(zhí)行完之前,這個實例流程會一直存在,并且id值不會變.

那么,我們可不可以在每次啟動流程時都將這個ProcessInstance對象保存記錄下來,然后再通過他的id值來查詢當前任務,也就是來跟蹤流程的執(zhí)行情況
給出獲取代碼

//開啟流程
		ProcessInstance processInstance = runtimeService
		.startProcessInstanceByKey(processKey, variables);
		processInstanceId = processInstance.getId();

然后,通過id值來獲取當前任務

Task task = taskService.createTaskQuery()//創(chuàng)建查詢對象
				.processInstanceId(processInstanceId)//通過流程實例id來查詢當前任務
				.singleResult();//獲取單個查詢結(jié)果

這樣就可以跟蹤流程啦!!!

這時候,問題又來了,怎么確定流程執(zhí)行完了呢?怎么讓程序自己找下一個任務?

還是用到ProcessInstance對象,前面說過,這個進程實例對象在流程執(zhí)行完之前會一直存在,也就是說,流程執(zhí)行完,這個對象就消失了,數(shù)據(jù)庫自動就給他刪除了.所以可以根據(jù)processInstanceId來查詢ProcessInstance對象,如果為空,說明流程已經(jīng)走完了,否則,沒有走完

獲取ProcessInstance對象的代碼

this.processEngine.getRuntimeService()
				.createProcessInstanceQuery()//獲取查詢對象
				.processInstanceId(processInstanceId)//根據(jù)id查詢流程實例
				.singleResult();//獲取查詢結(jié)果,如果為空,說明這個流程已經(jīng)執(zhí)行完畢,否則,獲取任務并執(zhí)行

這樣就可以判斷流程是否結(jié)束了

那么,接下來,就是如何讓流程自己找下一個任務,這里我用了一個while循環(huán)來解決,直接給出我的代碼

//開始進行流程
		while(this.processEngine.getRuntimeService()
				.createProcessInstanceQuery()//獲取查詢對象
				.processInstanceId(processInstanceId)//根據(jù)id查詢流程實例
				.singleResult()//獲取查詢結(jié)果,如果為空,說明這個流程已經(jīng)執(zhí)行完畢,否則,獲取任務并執(zhí)行
				!=null){
			Task task = taskService.createTaskQuery()//創(chuàng)建查詢對象
				.processInstanceId(processInstanceId)//通過流程實例id來查詢當前任務
				.singleResult();//獲取單個查詢結(jié)果
			String taskName = task.getName();
			if(taskName.equals("發(fā)起申請")){//職員節(jié)點
				completeEmployeeTask(task);
			}else if(taskName.equals("領(lǐng)導審批")){//領(lǐng)導節(jié)點
				completeLeaderTask(task);
			}else{//經(jīng)理節(jié)點
				completeJingliTask(task);
			}
		}

我的處理是把每個任務的完成,都封裝成一個方法,要完成該任務時直接調(diào)用該方法就行,傳入的參數(shù)是當前的任務的Task對象.

任務完成函數(shù)

//職員提交申請
	public void completeEmployeeTask(Task task){
		//獲取任務id
		String taskId = task.getId();
				
		//完成任務
		this.processEngine.getTaskService().complete(taskId);
		System.out.println("職員已經(jīng)提交申請.......");
		
	}
	//領(lǐng)導審批
	public void completeLeaderTask(Task task){
		//獲取任務id
		String taskId = task.getId();
				
		//領(lǐng)導意見
		Map<String, Object> variables = new HashMap<String, Object>();
		//variables.put("day",4);
		variables.put("leaderResult", 1);
		//完成任務
		this.processEngine.getTaskService().complete(taskId, variables);
		System.out.println("領(lǐng)導審核完畢........");
		
	}
	//經(jīng)理審批
	public void completeJingliTask(Task task){
		//獲取任務id
		String taskId = task.getId();
		String name = task.getName();
		//經(jīng)理意見
		Map<String, Object> variables = new HashMap<String, Object>();
		variables.put("result", 0);
		//完成任務
		this.processEngine.getTaskService().complete(taskId, variables);
		System.out.println("經(jīng)理審核完畢........,審核經(jīng)理:"+name);
		
	}

有的小伙伴就要問,明明經(jīng)理審核時有三個經(jīng)理,為什么只寫了一個經(jīng)理審批函數(shù)呢?

在經(jīng)理審核之前,是一個排他網(wǎng)關(guān),網(wǎng)關(guān)后面出來的連接線中可以設置篩選條件,滿足誰就去誰那里,設置見圖

這里寫圖片描述

這里的變量是在領(lǐng)導審批這個任務完成之后傳過來的,參數(shù)傳遞方法見上篇博文:http://m.fzitv.net/article/182226.htm

這樣,就實現(xiàn)了這個流程的基本運轉(zhuǎn)啦!!

哦,對,還有一個問題,部署了多個流程變量,如何準確開啟特定的流程
每個流程在定義的時候,都有一個id值,啟動時便通過這個id值來啟動,所以記住你設置的id值就可以啦!!!

到此這篇關(guān)于activiti實現(xiàn)員工請假流程解析的文章就介紹到這了,更多相關(guān)activiti請假流程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis-plus如何在xml中傳入自定義的SQL語句

    Mybatis-plus如何在xml中傳入自定義的SQL語句

    這篇文章主要介紹了Mybatis-plus如何在xml中傳入自定義的SQL語句問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • C++實現(xiàn)掃雷游戲示例講解

    C++實現(xiàn)掃雷游戲示例講解

    這篇文章主要介紹了C++實現(xiàn)掃雷游戲示例講解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • SpringMVC源碼解讀之HandlerMapping - AbstractUrlHandlerMapping系列request分發(fā)

    SpringMVC源碼解讀之HandlerMapping - AbstractUrlHandlerMapping系列re

    這篇文章主要介紹了SpringMVC源碼解讀之HandlerMapping - AbstractUrlHandlerMapping系列request分發(fā) 的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • java實現(xiàn)LFU算法的示例代碼

    java實現(xiàn)LFU算法的示例代碼

    LFU(Least Frequently Used)算法根據(jù)數(shù)據(jù)的歷史訪問頻率來淘汰數(shù)據(jù),其核心思想是“如果數(shù)據(jù)過去被訪問多次,那么將來被訪問的頻率也更高”,本文為大家整理了Java實現(xiàn)LFU算法的示例代碼,需要的可以參考下
    2023-11-11
  • Jmeter參數(shù)化實現(xiàn)方法及應用實例

    Jmeter參數(shù)化實現(xiàn)方法及應用實例

    這篇文章主要介紹了Jmeter參數(shù)化實現(xiàn)方法及應用實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • 淺談Java開發(fā)中的安全編碼問題

    淺談Java開發(fā)中的安全編碼問題

    這篇文章主要介紹了淺談Java開發(fā)中的安全編碼問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • java設計模式(實戰(zhàn))-責任鏈模式

    java設計模式(實戰(zhàn))-責任鏈模式

    這篇文章主要介紹了java設計模式(實戰(zhàn))-責任鏈模式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java字符串數(shù)字左右補全0的四種方式

    Java字符串數(shù)字左右補全0的四種方式

    這篇文章主要給大家介紹了關(guān)于Java字符串數(shù)字左右補全0的四種方式,在編程中有時候我們需要對一個字符串進行字符填充,以滿足某些特定的要求,其中補全0是一種常見的需求,需要的朋友可以參考下
    2023-08-08
  • mybatis配置mapper-locations的坑及解決

    mybatis配置mapper-locations的坑及解決

    這篇文章主要介紹了mybatis配置mapper-locations的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • SpringBoot整合Quartz實現(xiàn)定時任務詳解

    SpringBoot整合Quartz實現(xiàn)定時任務詳解

    這篇文章主要介紹了Java?任務調(diào)度框架?Quartz,Quartz是OpenSymphony開源組織在Job?scheduling領(lǐng)域又一個開源項目,完全由Java開發(fā),可以用來執(zhí)行定時任務,類似于java.util.Timer。,下面我們來學習一下關(guān)于?Quartz更多的詳細內(nèi)容,需要的朋友可以參考一下
    2022-08-08

最新評論

兰溪市| 长治县| 门头沟区| 永胜县| 金山区| 大港区| 西充县| 资溪县| 微博| 民和| 财经| 临沭县| 铜鼓县| 两当县| 宁强县| 含山县| 松滋市| 左权县| 玉山县| 绥德县| 清镇市| 天水市| 安远县| 句容市| 南京市| 五台县| 广河县| 巧家县| 温宿县| 玉屏| 延寿县| 大化| 阜阳市| 玛纳斯县| 上饶市| 高青县| 伊宁市| 乐至县| 灯塔市| 莫力| 宝鸡市|