成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么使用工作流引擎,什么是工作流引擎,工作流引擎選型以及如何使用

開發 前端
反證法,如果不使用工作流引擎,先以請假流程舉例,從頭開始開發流程的業務邏輯:(來看看會出現哪些問題?使用工作流能解決哪些問題?又會帶來什么問題?)

[[428836]]

本文轉載自微信公眾號「Java大廠面試官」,作者laker 。轉載本文請聯系Java大廠面試官代碼眾號。

為什么使用工作流引擎?

反證法,如果不使用工作流引擎,先以請假流程舉例,從頭開始開發流程的業務邏輯:(來看看會出現哪些問題?使用工作流能解決哪些問題?又會帶來什么問題?)

一、業務流程梳理

“流程定義可能是hardcoding或者存儲在某張表

  1. 總經理審批
  2. 結束
  3. 結束
  4. 員工發起請假單
  5. 組長審批
  6. 請假天數小于等于2天
  7. 請假天數大于2天

二、每個節點都要記錄當前操作人和判斷下個節點

  • if(day>2)
  • 總經理審批 (記錄誰發起的以及判斷下個節點)
  • 結束
  • if(day<=2)
  • 結束
  • 同意或者拒絕
  • nextUserId根據上面的流程定義獲取
  • 存入transfer狀態流轉表, userId nextUserId等 驅動到下一個節點
  • 員工填寫請假單并提交
  • nextUserId根據上面的流程定義獲取
  • 存入leave表,創建人,創建時間
  • 存入transfer狀態流轉表, userId nextUserId等 驅動到下一個節點
  • 員工發起請假單 (記錄誰發起的以及判斷下個節點)
  • 組長審批 (記錄誰發起的以及判斷下個節點)
  • 請假天數小于等于2天 (記錄誰發起的以及判斷下個節點)
  • 請假天數大于2天 (記錄誰發起的以及判斷下個節點)

如果再來個用車流程、報銷流程等,那么你的項目將無法維護

不使用工作流存在以下問題

  • 流程設計沒有可視化
  • 流程沒有版本管理,熱部署等
  • 每個活動的流轉都需要硬性判斷下一步活動節點及其操作人
  • 每次操作都需要維護業務數據和流程的相關數據
  • 缺乏數據管理、流程監控等功能

工作流優缺點

對上面共性問題進行抽象,抽象,抽象,可以得出下面的視圖。

把業務和流程進行了抽象分離,降低耦合,

優點

  • 具有可視化的流程設計工具
  • 業務數據和流程數據的分離,可以進行更專注的性能優化,業務劃分
  • 內置API能很好的完成常見的功能場景
  • 具有完善的流程監控體系
  • 具備大量的自定義擴展接口

缺點

需要額外的學習成本

什么是工作流引擎

所謂工作流引擎是指workflow作為應用系統的一部分,并為之提供對各應用系統有決定作用的根據角色、分工和條件的不同決定信息傳遞路由、內容等級等核心解決方案。工作流引擎包括流程的節點管理、流向管理、流程樣例管理等重要功能。(來自百科)

嘗試自己構建工作流引擎

以下內容取自:https://www.cnblogs.com/duck-and-duck/p/14436373.html

并進行了部分修改。

第1天

我查了一天啥是工作流,然后做出了如下版本:

按順序添加任意個審批人組成一個鏈表,最后加一個結束節點

記錄當前審批人,當審批完后,審批人向后移動一位

當審批人對應結束節點時,流程結束

“每個節點執行人是hardcoding的

第二天

發現部分業務需要支持會簽節點。

我又查了一天啥是會簽節點,發現會簽節點就是一個大節點,里面有很多審批人,當這個大節點里的所有人都審批通過后,才能進入下一個節點。

翻了原來的鏈表式設計:

第三天

發現部分業務需要支持條件節點。

要根據表單的內容確定下一步進入哪個分支。

第四天

審批人多加兩種類型,比如可以從表單中選擇下一個審批人,還有根據發起人不同選擇不同的審批人。

第五天

需要滿足xxx需求,卒。。。

“看來實現一個工作流引擎還是蠻難的,那有什么可選的輪子嗎

有哪些選型方案呢

工作流整體流程如下:

建模(事前) 運行 (事中) 管理 (事后) 監控(全生命周期)
流程設計 engine驅動 數據管理 流程監控

基于bpmn標準進行流程定義

什么是BPMN

BPMN 是 Business Process Modeling Notation 的簡稱,即業務流程建模與標注。BPMN 定義了一個業務流程圖,這個流程圖被設計用于創建業務流程操作的圖形化模型 。而一個業務流程模型( Business Process Model ),指一個由圖形對象( graphical objects )組成的網狀圖,圖形對象包括活動(activities) 和用于定義這些活動執行順序的流程控制器( flow controls )。

代表實現產品如下:

  • JBPM
  • Activiti
  • Flowable

國產自定義

  • snaker
  • jflow

如何使用SnakerFlow工作流

僅列出常見功能場景實現,具體介紹和詳情文檔參見:Spring Boot 集成SnakerFlow流程引擎,簡介、功能列表、詳細解讀、擴展點分析

“?? ?? ?? 已開源基于SnakerFlow輕量級工作流引擎的腳手架項目 easy-admin

“詳情參見:終于寫了個開源項目,easy-admin 為打造一款簡單、輕量級的后臺管理系統腳手架

以請假流程來看下數據庫中數據流轉情況

相關源碼已開源

已開源基于SnakerFlow輕量級工作流引擎的腳手架項目 easy-admin

詳情參見:終于寫了個開源項目,easy-admin 為打造一款簡單、輕量級的后臺管理系統腳手架

初始狀態

wf_process

員工發起請假申請

  1. args.put("user1", StpUtil.getLoginIdAsString()); 
  2. args.put("user2""yang"); 
  3. args.put("user3""zhang"); 
  4. Object day = args.get("day"); 
  5. if (day != null) { 
  6.     args.put("day"Integer.valueOf((String) day)); 
  7. }b 
  8. snakerEngineFacets.startAndExecute(name, version, StpUtil.getLoginIdAsString(), args); 

員工laker發起一個請假單,請假3天

laker的待辦列表為空,已辦列表如下:

yang的待辦列表如下:

當前監控流程圖

wf_order

wf_task

wf_task_actor

wf_hist_order

wf_hist_task

wf_hist_task_actor

常見功能

流程標題

我們經常希望待辦任務列表有一列是流程實例的名稱,即標題,例如,我們希望流程的標題是:張三 - 2019-12-04 16:40:20的請假申請 ,通常會采用一個命名規則:發起人+發起時間+流程模型名稱把它作為流程的標題。這時候就希望啟動流程實例時可以設置流程實例的名稱。

  1. args.put(SnakerEngine.ID, "張三 - 2019-12-04 16:40:20的請假申請"); 
  2. snakerEngineFacets.startAndExecute(name, version, StpUtil.getLoginIdAsString(), args); 

發起申請

  1. args.put(SnakerEngine.ID, "張三 - 2019-12-04 16:40:20的請假申請"); 
  2. snakerEngineFacets.startAndExecute(name, version, StpUtil.getLoginIdAsString(), args); 

我的發起

  1. QueryFilter filter = new QueryFilter(); 
  2. filter.setOperator(operator); 
  3. filter.orderBy("create_Time").order(DESC); 
  4. snakerEngineFacets.getEngine().query().getHistoryOrders(page, filter); 

我的待辦

  1. Page<WorkItem> page = new Page<>(30); 
  2. snakerEngineFacets.getEngine().query().getWorkItems(page, 
  3.         new QueryFilter().setOperator(operator)); 

我的已辦

  1. Page<WorkItem> page = new Page<>(30); 
  2. snakerEngineFacets.getEngine().query().getHistoryWorkItems(page, 
  3.         new QueryFilter().setOperator(operator)); 

催辦

  1. List<Task> tasks = snakerEngineFacets.getEngine().query().getActiveTasks(new QueryFilter().setOrderId(orderId)); 
  2. 根據這個task跟指定人發消息 

轉辦

轉辦任務(換當前辦理人,或者叫變更當前辦理人)

  1. snakerEngineFacets.transferMajor(taskId, operator, nextOperators); 

駁回

駁回/退回上一步/退回至(即退回到歷史某一個節點)

  1. snakerEngineFacets.executeAndJump(taskId, operator, args, nodeName); 

撤回

根據歷史任務id,撤回由該歷史任務派發的所有活動任務,如果無活動任務,則不允許撤回

  1. snakerEngineFacets.getEngine().task().withdrawTask(taskId, operator); 

抄送

實例的抄送類似于郵箱里面的抄送功能,一般用于將該流程實例抄送給領導查閱。

  1. 新增表wf_cc_order根據實例id、創建人、抄送人創建抄送記錄engine.order().createCCOrder(String orderId, String creator, String... actorIds)更新狀態用于更新抄送記錄為已經閱讀engine.order().updateCCStatus(String orderId, String... actorIds)     

加簽

加簽(增加另一人或多人的審批)

  1. engine.task().addTaskActor(String taskId, 1, String... actorIds) 

會簽

會簽(通常用于審批后給相關的人簽字確認,以獲得工作上的協調。)

snaker的會簽目前相對比較簡單,僅僅是根據任務節點的performType屬性值確定是否產生多個相同任務。

performType的值有兩種,分別是ANY、ALL。

ANY多個參與者時,任何一個完成任務即繼續流轉 (或簽)

ALL多個參與者時,所有都需要完成任務才能繼續流轉

會簽只需要在流程定義時,將任務節點的屬性performType值設置為ALL即可,當調用api時傳遞多個參與者時,則自動派發與參與者數量相同的任務。會簽任務必須等待所有參與者完成后,才繼續流轉

或簽

同上

 

已開源基于SnakerFlow輕量級工作流引擎的腳手架項目 easy-admin詳情參見:終于寫了個開源項目,easy-admin 為打造一款簡單、輕量級的后臺管理系統腳手架

 

責任編輯:武曉燕 來源: Java大廠面試官
相關推薦

2023-01-04 08:02:16

工作流架構設計

2011-12-14 09:58:58

JavajBPM

2023-07-05 09:48:44

Activiti部署

2009-06-11 14:43:34

jbpm工作流引擎jBPM搭建

2015-07-14 09:26:28

微型工作流引擎設計

2024-10-17 08:39:32

2023-08-02 18:48:23

Flowable工作流引擎

2012-07-23 10:36:46

工作流

2009-09-01 18:26:23

C#工作流引擎

2013-09-29 17:13:59

PowerShell工作流

2021-12-17 08:39:39

SpringbootActiviti網關路由

2014-07-31 17:03:12

2009-06-11 14:33:11

jbpm工作流引擎什么是jbpm

2021-03-12 06:44:09

Argo Workfl開源項目

2021-07-26 18:38:48

Bpmn流程

2009-06-11 14:48:48

jbpm工作流引擎jbpm例子

2023-06-12 08:01:57

Camunda工作流引擎

2009-07-31 17:50:27

ASP.NET工作流

2012-05-18 16:55:34

JavaBonita

2022-10-26 08:00:43

Activiti工作流BPM
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费看黄视频网站 | 久久精品国产一区二区电影 | 天天操天天怕 | 日本久久网 | 精品国产31久久久久久 | 成人三级在线播放 | 最新国产精品精品视频 | 九九久久久| 国产精品毛片 | 国产视频第一页 | 国产精品日韩在线观看 | 国产午夜精品一区二区三区嫩草 | 欧美日韩久久精品 | 中文字幕高清在线 | 精品久久久久一区二区国产 | 国产精品国产三级国产aⅴ无密码 | 国产大片一区 | 亚洲天堂影院 | 95国产精品 | 欧美一级免费看 | 久久久91 | 97国产精品视频人人做人人爱 | 欧美成人精品一区二区男人看 | 中文字幕在线观看国产 | 一区二区三区免费网站 | 男人的天堂久久 | 黄色网址免费在线观看 | 精品国产欧美 | 色综合久| 亚洲激精日韩激精欧美精品 | 欧美一区二区三区视频 | 亚洲国产成人精品女人久久久野战 | 亚洲成人动漫在线观看 | 一区二区三区av | 天天宗合网 | 一区二区三区视频在线观看 | 一区二区三区四区国产 | 中文日本在线 | 国精日本亚洲欧州国产中文久久 | 欧美一区二区另类 | 欧美黑人又粗大 |