• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      簡易審批流引擎的設計與實現(xiàn)

      2024-09-15 00:00:00魏鑫
      電腦知識與技術 2024年24期

      摘要:審批流程引擎是一種軟件組件,用于實現(xiàn)審批流程的自動化,提高工作效率。它可以幫助企業(yè)和組織快速創(chuàng)建和配置復雜的審批流程,從而提高工作效率。審批流程引擎具有易配置、易管理、易使用等優(yōu)勢。然而,傳統(tǒng)的審批流程引擎存在一些問題,例如,每當需要增加新的審批環(huán)節(jié)時,所有變更都需要重新編寫代碼、編譯、發(fā)布和重新部署,這會帶來一定的麻煩。文章基于開源腳手架平臺Bladex,設計了一個可配置化的簡易審批流程引擎,該引擎可以配置審批流程的節(jié)點、按鈕、彈出頁面、取人規(guī)則等,從而減少審批流程修改時對代碼的重復編寫工作。

      關鍵詞:工作流;審批流程;流程配置

      中圖分類號:TP311 文獻標識碼:A

      文章編號:1009-3044(2024)24-0057-04

      開放科學(資源服務)標識碼(OSID)

      0 引言

      工作流的概念起源于生產(chǎn)組織和辦公自動化領域,用于處理日常工作中具有固定程序的活動[1]。工作流旨在實現(xiàn)數(shù)據(jù)電子化流轉,其中業(yè)務流程是工作流的核心[2]。隨著企業(yè)無紙化辦公計劃的推廣,各種審批流程逐漸向線上遷移s0TBhlIAnRLJzkgAXmGviPnM+4koYGUYLuAM157ungs=。公司業(yè)務流程復雜,需要一款流程引擎能夠在審批流轉的同時配置流程中的按鈕、審批頁面、取人規(guī)則等。同一按鈕通過審批單據(jù)的條件可以彈出不同的審批界面,去往不同的分支,獲取不同的下一步審批人員,審批流程需要能夠配合業(yè)務的變化而更改?,F(xiàn)有的審批流程引擎難以滿足本公司大量復雜多變的業(yè)務流程需求。因此,本文設計并實現(xiàn)了一款輕量級的審批流程引擎,以適應小型業(yè)務審批的需求。

      1 設計

      1.1 框架架構

      該系統(tǒng)基于開源腳手架Bladex分布式框架實現(xiàn)。Bladex是一個基于Spring Cloud等核心技術的開源腳手架平臺,用于快速構建中大型系統(tǒng)。Spring Cloud以其卓越的全面功能和高度的可定制性,使其成為當今分布式網(wǎng)站構建的主流解決方案[3]。Bladex繼承了Spring Cloud的優(yōu)點,并簡化了開發(fā)復雜度。該系統(tǒng)采用了MyBatisPlus框架連接并操作數(shù)據(jù)庫。MyBatisPlus框架提供內(nèi)置的封裝方法,開發(fā)者只需簡單調用即可大幅提升開發(fā)效率,顯著減少操作時間,從而簡化開發(fā)流程[4]。該系統(tǒng)前端采用Vue框架。Vue是一款輕量而高效的前端框架,其卓越的擴展性和可維護性為開發(fā)人員提供了更為高效、便捷且穩(wěn)定的開發(fā)環(huán)境[5]。

      1.2 數(shù)據(jù)庫設計

      該項目包含基礎模塊、定義模塊、執(zhí)行模塊、歷史模塊,具體數(shù)據(jù)庫表如表1所示。

      2 功能實現(xiàn)

      2.1 基礎定義

      圖1為基礎配置模塊配置關系圖,該模塊提供系統(tǒng)模塊、流程節(jié)點、審批按鈕、審批頁面、取人規(guī)則等定義。基礎配置模塊的核心是系統(tǒng)模塊定義,用于定義各個不同的審批系統(tǒng),例如訪客、請假等。

      一個系統(tǒng)模塊包含多個流程節(jié)點。流程節(jié)點是審批時的節(jié)點,每一次審批,節(jié)點都會變化,跳轉到下一個節(jié)點。節(jié)點主要有開始節(jié)點、普通節(jié)點、結束節(jié)點三大類型。

      一個系統(tǒng)模塊包含多個審批頁面,用于人員進行審批操作時的跳轉頁面。通過配置流程審批頁面,可以實現(xiàn)審批時對應審批頁面的靈活變化。

      一個系統(tǒng)模塊包含多個取人規(guī)則,用于配置流程節(jié)點中的取人規(guī)則。流程審批時,系統(tǒng)會根據(jù)配置的取人規(guī)則查詢并設置對應下一步節(jié)點的待辦人員。取人規(guī)則包含組織、角色、職級,通過特定的解析工具選擇下一步待辦人員。

      一個系統(tǒng)模塊包含多個審批按鈕。按鈕配置用于配置流程審批時的按鈕,可以修改按鈕的顏色樣式、文字描述,以滿足業(yè)務需求的靈活多變。

      人員、角色、職級等相關定義則采用開源腳手架Bladex自帶的模塊,以滿足系統(tǒng)的快速開發(fā)迭代需求。

      2.2 工作流定義

      圖2展示了流程定義關系,用戶可以通過前端頁面操作定義和調整工作流程。流程包含流程編碼、系統(tǒng)模塊、租戶、公司、取用規(guī)則、優(yōu)先級等信息,可以通過系統(tǒng)模塊、組織信息、優(yōu)先級、流程取用規(guī)則條件匹配需要執(zhí)行的流程。流程包含的系統(tǒng)模塊參數(shù),可以通過模塊查詢節(jié)點,并根據(jù)需求選取對應的節(jié)點關聯(lián)到該流程上。

      流程節(jié)點上配置審批列表按鈕與跳轉頁面定義,如圖3所示,待審批列表內(nèi)有配置的審批按鈕“派工”,點擊“派工”按鈕跳轉到配置的“派工”頁面。

      流程下一步詳情配置包含了跳轉頁面內(nèi)的審批按鈕、下一節(jié)點、取人規(guī)則、匹配規(guī)則、優(yōu)先級等,如圖4所示。配置多個相同按鈕的分支可以根據(jù)匹配規(guī)則進行判斷具體進入哪一分支。

      2.3 工作流執(zhí)行

      2.3.1 匹配流程

      業(yè)務單據(jù)創(chuàng)建時,系統(tǒng)會根據(jù)系統(tǒng)模塊、組織信息、優(yōu)先級、流程取用規(guī)則條件等信息選取第一個滿足條件的流程,具體代碼如下所示:

      1. // 根據(jù)租戶、公司、系統(tǒng)模塊 獲取所有流程

      2. List<WfProcessEntity> list = getAllProcess(tenantId, param.getCompCd(), systemCd);

      3. WfProcessEntity entity = null;

      4. boolean flag = false;

      5. // 通過UEL表達式以及優(yōu)先級 獲取第一個匹配的流程

      6. for (int i = 0; i < list.size(); i++) {

      7. String uel = list.get(i).getMatchJuel();

      8. if (StringUtil.isNullOrEmpty(uel)) {

      9. entity = list.get(i);

      10. flag = true;

      11. break;

      12. }

      13. try {

      14. // uel判斷

      15. if (this.juel(uel,param)) {

      16. entity = list.get(i);

      17. flag = true;

      18. break;

      19. }

      20. } catch (Exception e) {

      21. continue;

      22. }

      23. }

      2.3.2 開啟流程

      業(yè)務單據(jù)提交時,系統(tǒng)會執(zhí)行如圖5所示的流程,創(chuàng)建流程對應的流程任務實例、流程主分支實例,并記錄操作,自動進行下一步操作,具體代碼如下所示:

      1.// 創(chuàng)建提交時上下文環(huán)境approval

      2.ProcessApproval approval = new ProcessApproval();

      3.approval.setWfTaskEntity(wfApproval.getTaskEntity());

      4.// 將流程實例taskEntity插入數(shù)據(jù)庫

      5.wfTaskDao.insert(wfApproval.getTaskEntity());

      6.// 設置提交人 userId username

      7.approval.setApprovalUser(wfApproval.getUserId());

      8.approval.setApprovalUserName(wfApproval.getUserName());

      9.// 設置提交上下文環(huán)境approval

      10.setApproval(approval,null,null);

      11.// 創(chuàng)建主分支

      12.workFlowBranchService.setMastBranch(approval);

      13.// 設置人員

      14.approval.setUserEmpInfoList(wfApproval.getUserList());

      15.Date now = new Date();

      16.// 設置record流程操作記錄

      17.setRecord(approval,now);

      18.// 開啟下一步

      19.goNext(approval,now);

      2.3.3流程審批

      業(yè)務單據(jù)審批時,系統(tǒng)會執(zhí)行如圖6所示的流程。根據(jù)客戶端選取的按鈕,匹配相應的分支進行下一步操作,并記錄操作。如果下一步流程未結束,則將查詢到的下一步人員存入待辦列表wf_task_user中。具體代碼如下所示:

      1. // 創(chuàng)建審批時上下文環(huán)境approval

      2. ProcessApproval approval = new ProcessApproval();

      3. String taskUserId = wfApproval.getTaskUserId();

      4. String processNodeDetailId = wfApproval.getProcessNodeDetailId();

      5. // 設置審批人 userId username

      6. approval.setApprovalUser(wfApproval.getUserId());

      7. approval.setApprovalUserName(wfApproval.getUserName());

      8. // 設置當前節(jié)點

      9. if(wfApproval.getCurrentState()==null){

      10. throw new ServiceException("當前節(jié)點未傳入");

      11. }

      12. approval.setCurrentState(wfApproval.getCurrentState());

      13. // 設置審批上下文環(huán)境approval

      14.setApproval(approval,taskUserId,processNodeDetailId);

      15. // 設置人員 由審批端提供

      16. approval.setUserEmpInfoList(wfApproval.getUserList());

      17. Date now = new Date();

      18. // 設置record

      19. setRecord(approval,now);

      20. // 開啟下一步

      21. goNext(approval,now);

      2.3.4 結束流程

      流程結束判斷包含在流程審批中。系統(tǒng)會判斷下一步節(jié)點是否為結束節(jié)點,如果下一步流程結束,則所有信息將轉移到歷史表中。具體判斷代碼如下所示:

      1. // 需要判斷是否是結束節(jié)點

      2. WfProcessNodeDetail processNodeDetail = approval.getWfProcessNodeDetail();

      3. // 獲取下一步節(jié)點的類型(開始節(jié)點、結束節(jié)點、普通節(jié)點)

      4. String type = processNodeDetail.getNextType();

      5. if(!StringUtil.isNullOrEmpty(type)&&type.starts With("end")){

      6. // 設置分支狀態(tài)結束

      7. approval.getInstanceEntity().setStatus(3);

      8. Date date = new Date();

      9. // 設置結束時間

      10.approval.getWfTaskEntity().setFinishTime(date);

      11.approval.getInstanceEntity().setFinishTime(date);

      12. }else{

      13. // 非結束節(jié)點 查詢是否有人員

      14. if(approval.getUserEmpInfoList()==null||approval.getUserEmpInfoList().size()==0){

      15. throw new ServiceException("非結束節(jié)點,請先選擇人員");

      16. }

      17. }

      3 結束語

      該系統(tǒng)目前已包含審批流程的大部分功能,如流程定義、流程審批、待辦查詢等,并支持會簽、分組審批等多種復雜功能。系統(tǒng)可以便捷配置流程以及審批按鈕、審批界面等內(nèi)容,以滿足公司業(yè)務多變的審批流程需求。該系統(tǒng)預留了分支模塊,為未來可能出現(xiàn)的分支流程節(jié)點保留了擴展的可能。

      參考文獻:

      [1] 劉超.輕量級工作流引擎的設計與實現(xiàn)[J].信息系統(tǒng)工程,2022(12):7-10.

      [2] 張曉鵬,王新.OA系統(tǒng)工作流精細化管理的實踐與應用[J].中國管理信息化,2022,25(17):123-125.

      [3] 林宇聰,馮祥勝,葉健安.基于分布式框架的城市內(nèi)澇智慧監(jiān)測系統(tǒng)[J].電腦知識與技術,2021,17(10):30-32,36.

      [4] 白添予.基于MyBatisPlus的數(shù)據(jù)庫框架優(yōu)化綜述[J].電腦與信息技術,2024,32(3):75-77,133.

      [5] 羅光武,陳典燦,吳荷,等.應用Springboot+Vue框架的時間管理軟件的設計與實現(xiàn)[J].工業(yè)控制計算機,2024,37(4):64-66.

      【通聯(lián)編輯:謝媛媛】

      壶关县| 曲周县| 天镇县| 罗甸县| 元朗区| 惠东县| 达日县| 芦山县| 荔波县| 灵台县| 从化市| 临城县| 辉南县| 武山县| 满城县| 都江堰市| 镶黄旗| 玛沁县| 大田县| 浪卡子县| 扎鲁特旗| 民乐县| 黑水县| 葵青区| 策勒县| 定西市| 会昌县| 阳泉市| 郯城县| 新泰市| 岗巴县| 丘北县| 乌拉特后旗| 柯坪县| 文安县| 武穴市| 鲁甸县| 饶平县| 衡阳市| 黄石市| 繁峙县|