每天資訊Github 標星35k 的 SpringBoot整合acvtiviti開源分享,受益匪淺

菜單

Github 標星35k 的 SpringBoot整合acvtiviti開源分享,受益匪淺

前言

activiti是目前比較流行的工作流框架,但是activiti學起來還是費勁,還是有點難度的,如何整合線上編輯器,如何和業務表單繫結,如何和系統許可權繫結,這些問題都是要考慮到的,不是說純粹的把activiti整合到系統中就完事了。如今國內比較流行的是前後端分離模式,之前都是前後端放一個工程裡面,介面風格很亂,並且不好維護,前後端開發不是很方便。目前前端都做成了工程化的形式,比如國產的Vue,國外的React等等。為了順應潮流,我就做了一套springboot-vue-activiti的快速開發小腳手架,對於大型專案來說還是不太適合,畢竟來說,一個人的開發能力有限,但是對於中小微型專案,並且帶有審批業務的專案來說,那簡直就是一個福音了。

一、效果展示

1。模型設計器

Github 標星35k 的 SpringBoot整合acvtiviti開源分享,受益匪淺

2。流程節點設定

審批人員可以根據角色、部門、部門負責人、直接選擇人員等。

Github 標星35k 的 SpringBoot整合acvtiviti開源分享,受益匪淺

3。審批進度查詢

Github 標星35k 的 SpringBoot整合acvtiviti開源分享,受益匪淺

二、操作過程

1。引入activiti依賴

<!—— Activiti 啟動器 ——>

org。activiti

activiti-spring-boot-starter-basic

${activiti。version}

org。mybatis

mybatis

<!—— Activiti 流程圖 ——>

org。activiti

activiti-diagram-rest

${activiti。version}

<!—— Activiti 線上設計 ——>

org。activiti

activiti-modeler

${activiti。version}

2。編輯器程式碼及漢化

Github 標星35k 的 SpringBoot整合acvtiviti開源分享,受益匪淺

3。application。yml配置

activiti:

check-process-definitions: false

#啟用作業執行器

async-executor-activate: false

#啟用非同步執行器

job-executor-activate: false

4。資料庫表

Github 標星35k 的 SpringBoot整合acvtiviti開源分享,受益匪淺

三、業務表單和系統許可權繫結

1。思路

1。新建一張流程定義擴充套件表(用來儲存流程部署的基本資訊、關聯業務表名、前端路由資訊、業務表單型別等),流程部署完後往流程定義擴充套件表插入部署基本資訊,然後編輯已釋出的流程,往擴充套件表中插入本流程的分類,關聯表單資訊。

2。關於自定義節點設定,主要是用來定義每個節點由哪個角色,或者具體哪個人來審批。建立一張節點擴充套件表(儲存節點流轉資訊,指定人ID、角色ID,等)。

2。部分程式碼

// 獲取模型

Model modelData = repositoryService。getModel(id);

byte[] bytes = repositoryService。getModelEditorSource(modelData。getId());

if (bytes == null) {

return Result。error(“模型資料為空,請先成功設計流程並儲存”);

}

try {

JsonNode modelNode = new ObjectMapper()。readTree(bytes);

BpmnModel model = new BpmnJsonConverter()。convertToBpmnModel(modelNode);

if(model。getProcesses()。size()==0){

return Result。error(“模型不符要求,請至少設計一條主線流程”);

}

byte[] bpmnBytes = new BpmnXMLConverter()。convertToXML(model);

// 部署釋出模型流程

String processName = modelData。getName() + “。bpmn20。xml”;

Deployment deployment = repositoryService。createDeployment()

。name(modelData。getName())

。addString(processName, new String(bpmnBytes, “UTF-8”))

。deploy();

String metaInfo = modelData。getMetaInfo();

JSONObject metaInfoMap = JSON。parseObject(metaInfo);

// 設定流程分類,儲存擴充套件流程至資料庫

List list = repositoryService。createProcessDefinitionQuery()。deploymentId(deployment。getId())。list();

for (ProcessDefinition pd : list) {

ActZprocess actZprocess = new ActZprocess();

actZprocess。setId(pd。getId());

actZprocess。setName(modelData。getName());

actZprocess。setProcessKey(modelData。getKey());

actZprocess。setDeploymentId(deployment。getId());

actZprocess。setDescription(metaInfoMap。getString(ModelDataJsonConstants。MODEL_DESCRIPTION));

actZprocess。setVersion(pd。getVersion());

actZprocess。setDiagramName(pd。getDiagramResourceName());

actZprocessService。setAllOldByProcessKey(modelData。getKey());

actZprocess。setLatest(true);

actZprocessService。save(actZprocess);

}

}catch (Exception e){

String err = e。toString();

log。error(e。getMessage(),e);

if (err。indexOf(“NCName”)>-1){

return Result。error(“部署失敗:流程設計中的流程名稱不能為空,不能為數字以及特殊字元開頭!”);

}

if (err。indexOf(“PRIMARY”)>-1){

return Result。error(“部署失敗:該模型已釋出,key唯一!”);

}

return Result。error(“部署失敗!”);

}

return Result。ok(“部署成功”);

總結

上面只是展示了部分程式碼和部分效果圖,對於一個正常的審批流轉業務來說,提交審批,申請人撤銷,重新申請,審批人駁回,委託他人審批,會籤,流程掛起,流程實時跟蹤,並行閘道器,排他閘道器,監聽,待辦,已辦訊息通知等都是必須要的,我這就不一一展現了。