Activiti基于BPMN-JS的在線作圖工具

前言

找一個(gè)好用的畫圖工具真心不容易菌湃,Activiti 工作流自帶的 Web 版畫圖工具芯肤,外表挺華麗巷折,其實(shí)使用起來各種擰巴;Eclipse 的 Activiti 畫圖插件纷妆,對于相對復(fù)雜的流程也是很不友好盔几。

環(huán)境搭建

網(wǎng)上有許多詳細(xì)的安裝配置步驟,這里就不一一贅述掩幢,只列出相關(guān)版本逊拍。

軟件 版本 功能 地址
Python 3.7.1 腳本語言 https://www.python.org/
Django 2.1.3 Web框架 https://www.djangoproject.com/
PyCharm 2018.2.4 可視化開發(fā)工具 http://www.jetbrains.com/pycharm/
BPMN-JS 3.2.2 BPMN前端插件 https://github.com/bpmn-io/bpmn-js

項(xiàng)目截圖

項(xiàng)目開發(fā)

功能模塊

這是一個(gè)Python版本,Java版本功能已經(jīng)基本開發(fā)完畢际邻,需要進(jìn)行功能遷移芯丧。

  • 用戶登錄
  • 流程列表(CURD)
  • 用戶注冊(待實(shí)現(xiàn))
  • 游客訪問在線作圖,可實(shí)現(xiàn)在線導(dǎo)入導(dǎo)出世曾,本地緩存

創(chuàng)建項(xiàng)目

切換到工作空間缨恒,執(zhí)行以下命令:

django-admin.py startproject bpmn

最終目錄結(jié)構(gòu),省略部分代碼:

├─bpmn
│  │  settings.py
│  │  urls.py
│  │  wsgi.py
│  │  __init__.py
├─script
│      uwsgi.ini
├─static
├─templates
│      bpmn.html
└─view
    │  index.py

核心代碼

var bpmnModeler = new BpmnJS({
     container: '#canvas',
     keyboard: {
        bindTo: window
    }
});
function openDiagram() {
                  bpmnXML='<?xml version="1.0" encoding="UTF-8"?>\n' +
                '<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd" id="sample-diagram" targetNamespace="http://bpmn.io/schema/bpmn">\n' +
                '  <bpmn2:process id="Process_1">\n' +
                '    <bpmn2:startEvent id="StartEvent_1"/>\n' +
                '  </bpmn2:process>\n' +
                '  <bpmndi:BPMNDiagram id="BPMNDiagram_1">\n' +
                '    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">\n' +
                '      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">\n' +
                '        <dc:Bounds height="36.0" width="36.0" x="412.0" y="240.0"/>\n' +
                '      </bpmndi:BPMNShape>\n' +
                '    </bpmndi:BPMNPlane>\n' +
                '  </bpmndi:BPMNDiagram>\n' +
                '</bpmn2:definitions>'; //BPMN 2.0 xml
           }
            // import diagram
            bpmnModeler.importXML(bpmnXML, function(err) {
                  if (err) {
                    return console.error('could not import BPMN 2.0 diagram', err);
                  }
            });
}

巴拉巴拉轮听,代碼還有一噸骗露,這里就不貼了,后面會放源碼地址血巍。

部署

服務(wù)器還是選擇Linux萧锉,部署前需要做以下操作。

Django

由于之前外網(wǎng)沒有安裝 Django述寡,需要先安裝:

pip install Django

sqlite

為了測試方便柿隙,這里我們選擇 Django 默認(rèn)自帶的 sqlite 數(shù)據(jù)庫:

yum install sqlite*

安裝成功以后需要重新配置并編譯安裝 Python3:

# 配置編譯
./configure
# 編譯安裝
make && make install

uwsgi

安裝服務(wù)器 uwsgi叶洞,你可以把它想象成Java界的Tomcat

pip3 install uwsgi

這里你可以直接使用項(xiàng)目中script文件夾中的uwsgi.ini配置,只需修改項(xiàng)目路徑即可禀崖。

然后使用以下命令啟動(dòng):

uwsgi  --ini uwsgi.ini

執(zhí)行命令衩辟,查看是否啟動(dòng)成功:

[root@AY140216131049Z script]# ps -ef|grep uwsgi  
root      3040     1  0 Nov21 ?        00:00:03 uwsgi --ini uwsgi.ini
root      3041  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      3042  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      3043  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      3044  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      3045  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      3046  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      6606  6580  0 18:13 pts/0    00:00:00 grep --color=auto uwsgi

重啟:

uwsgi --reload uwsgi.pid

停止:

uwsgi --stop uwsgi.pid

Nginx

最后一步,配置Nginx 轉(zhuǎn)發(fā)波附,具體安裝這里不再說明艺晴,直接上配置(HTTPS安全證書請自行申請):

server {
        listen 80;
        listen 443 ssl;
        server_name  bpmn.52itstyle.vip;
        index index.php;
        #ssl on;
        #證書路徑
        ssl_certificate    /usr/local/openresty/nginx/cert/1961848_bpmn.52itstyle.vip.pem;
        #私鑰路徑
        ssl_certificate_key   /usr/local/openresty/nginx/cert/1961848_bpmn.52itstyle.vip.key;
        #緩存有效期
        ssl_session_timeout 5m;
        #可選的加密算法,順序很重要,越靠前的優(yōu)先級越高.
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        #安全鏈接可選的加密協(xié)議
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        location / {
           include uwsgi_params; # 導(dǎo)入一個(gè)Nginx模塊他是用來和uWSGI進(jìn)行通訊的
           uwsgi_connect_timeout 30; # 設(shè)置連接uWSGI超時(shí)時(shí)間
           uwsgi_pass unix:/www/bpmn/script/uwsgi.sock; # 指定uwsgi的sock文件所有動(dòng)態(tài)請求就會直接丟給他
        }
        # 動(dòng)靜分離 Nginx 處理靜態(tài)請求
        location /static {
            root /www/bpmn/;
        }
   }

演示

以下是基于 bpmn-js 開發(fā)的一個(gè) Activiti 工作流作圖管理系統(tǒng),可以增刪查改流程圖掸屡,系統(tǒng)還在優(yōu)化中财饥。

游客訪問:https://bpmn.52itstyle.vip/

源碼

https://gitee.com/52itstyle/BPMN

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市折晦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沾瓦,老刑警劉巖满着,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贯莺,居然都是意外死亡风喇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門缕探,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魂莫,“玉大人,你說我怎么就攤上這事爹耗“铱迹” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵潭兽,是天一觀的道長倦始。 經(jīng)常有香客問我,道長山卦,這世上最難降的妖魔是什么鞋邑? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮账蓉,結(jié)果婚禮上枚碗,老公的妹妹穿的比我還像新娘。我一直安慰自己铸本,他們只是感情好肮雨,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著归敬,像睡著了一般酷含。 火紅的嫁衣襯著肌膚如雪鄙早。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天椅亚,我揣著相機(jī)與錄音限番,去河邊找鬼。 笑死呀舔,一個(gè)胖子當(dāng)著我的面吹牛弥虐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播媚赖,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼霜瘪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了惧磺?” 一聲冷哼從身側(cè)響起颖对,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎磨隘,沒想到半個(gè)月后缤底,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡番捂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年个唧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片设预。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡徙歼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鳖枕,到底是詐尸還是另有隱情魄梯,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布耕魄,位于F島的核電站画恰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吸奴。R本人自食惡果不足惜允扇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望则奥。 院中可真熱鬧考润,春花似錦、人聲如沸读处。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罚舱。三九已至井辜,卻和暖如春绎谦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粥脚。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工窃肠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刷允。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓冤留,卻偏偏與公主長得像,于是被迫代替她去往敵國和親树灶。 傳聞我的和親對象是個(gè)殘疾皇子纤怒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容