Acitivi 入門(mén)Demo

Activiti Demo

BPMN

BPMN(Business Process Modeling Notation)是一個(gè)重要的工作流建模語(yǔ)言的規(guī)范。它利用標(biāo)準(zhǔn)的圖元去描述真實(shí)的業(yè)務(wù)發(fā)生過(guò)程昂勒,保證相同的流程在不同的流程引擎得到的執(zhí)行結(jié)果一致。

本demo中業(yè)務(wù)流程:用戶(hù)發(fā)起請(qǐng)假,然后經(jīng)理審批涌庭,如果請(qǐng)假時(shí)間比較短村砂,請(qǐng)假完成,流程結(jié)束葫笼;如果請(qǐng)假超過(guò)3天深啤,轉(zhuǎn)給總經(jīng)理審批,然后才能請(qǐng)假完成路星。

用到的BPMN圖

業(yè)務(wù)流程圖

activiti配置

    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-engine</artifactId>
      <version>${activiti-version}</version>
    </dependency>
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-spring</artifactId>
      <version>${activiti-version}</version>
    </dependency>

創(chuàng)建數(shù)據(jù)庫(kù)

本demo在本地運(yùn)行溯街,首先需要在本地?cái)?shù)據(jù)庫(kù)創(chuàng)建schema(此處為activiti-demo)。
然后運(yùn)行以下代碼洋丐,創(chuàng)建activiti引擎需要的25張表(acitivti提供了創(chuàng)建這些表需要的sql,也可以手動(dòng)創(chuàng)建)

        ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();

        processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
        processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/activiti-demo?useUnicode=true&characterEncoding=utf8");
        processEngineConfiguration.setJdbcUsername("root");
        processEngineConfiguration.setJdbcPassword("root");

        processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
        System.out.println("processEngine"+processEngine);

部署一個(gè)工作流程


    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    @Test
    public void startDeployment(){
        Deployment deployment = processEngine.getRepositoryService()
                .createDeployment()
                .addClasspathResource("diagrams/VariableUsersDemo.bpmn")
                .addClasspathResource("diagrams/VariableUsersDemo.png")
                .deploy();
        System.out.println("Deploy deploy ID: " + deployment.getId());


    }
    

png文件可以不添加呈昔,只是用作用戶(hù)查看流程。

開(kāi)始一個(gè)流程實(shí)例

        public void startProcessInstance(){

        String deployKey = "variableProcess";

        Map<String,Object> variables = new HashMap<>();

        variables.put("user","jianke");
        variables.put("manager","caohao");
        variables.put("boss","zhangqi");

        RuntimeService runtimeService = processEngine.getRuntimeService();
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(deployKey, variables);
         String processInstanceID = processInstance.getId();
        System.out.println("流程實(shí)例ID: " + processInstanceID);



    }

variables保存一些該流程需要的變量友绝,此處用來(lái)保存了一些人員信息堤尾,即何人發(fā)起,需要何人進(jìn)行審批迁客。
user,manager,boss這些字段是在流程圖中設(shè)置的郭宝。


BPMN中設(shè)置人員信息

給該實(shí)例附加請(qǐng)假信息

        TaskService service = processEngine.getTaskService();
        List<Task> list = service.createTaskQuery().processInstanceId(processInstanceID).taskCandidateUser("jianke")
                .list();
        for(Task task:list){
            System.out.println("Task ID : " + task.getId() + "   " + task.getName());
            service.claim(task.getId(),"jianke"); //確定請(qǐng)假任務(wù)
            Leave leave = new Leave();
            leave.setName("jianke");
            leave.setContent("Go to Sleep");
            leave.setCreateTime(new Date());
            leave.setDays(5);
            service.setVariable(task.getId(), "info", leave); //添加請(qǐng)假信息
            service.complete(task.getId()); //完成請(qǐng)假,提交審批
        }

經(jīng)理審批

        List<Task> list = service.createTaskQuery().processInstanceId(processInstanceID).taskCandidateUser("caohao")
                .list();   //搜索等待主管處理的任務(wù)
        for(Task task:list){
            System.out.println("Task ID : " + task.getId() + "   " + task.getName());
            service.claim(task.getId(), "caohao"); //主管接受任務(wù)
            Leave leave = (Leave)service.getVariable(task.getId(),"info");

            Map<String,Object> object = new HashMap<>();
            object.put("days", leave.getDays());
            service.complete(task.getId(), object);  //主管審批掷漱,并附帶請(qǐng)假天數(shù)信息粘室,交給引擎處理是否需要總經(jīng)理審批
            System.out.println("complete!");
        }

在BPMN中添加是否總經(jīng)理審批的判斷:


BPMN中添加判斷邏輯

總經(jīng)理審批

            //操作流程同經(jīng)理審批
        TaskService service = processEngine.getTaskService();
        List<Task> list = service.createTaskQuery().processInstanceId(processInstanceID).taskCandidateUser("zhangqi")
                .list();
        for(Task task:list){
            System.out.println("Task ID : " + task.getId() + "   " + task.getName());
            service.claim(task.getId(), "zhangqi");
            
              service.complete(task.getId());
            System.out.println("complete!");
        }

請(qǐng)假流程完成通知

public class endListener implements ExecutionListener {

    @Override
    public void notify(DelegateExecution delegateTask){
         //在此處進(jìn)行請(qǐng)假完成后的操作,比較通知請(qǐng)假人切威,記錄檔案等
         
         
        System.out.println("Task End!");
    }

}

給結(jié)束節(jié)點(diǎn)添加通知的方法育特,在BPMN圖中添加:


BPMN中添加通知

附上原碼地址,大家一起學(xué)習(xí)探討:
https://github.com/qixiaojian/activiti-demo.git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末先朦,一起剝皮案震驚了整個(gè)濱河市缰冤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喳魏,老刑警劉巖棉浸,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異刺彩,居然都是意外死亡迷郑,警方通過(guò)查閱死者的電腦和手機(jī)枝恋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嗡害,“玉大人焚碌,你說(shuō)我怎么就攤上這事“悦茫” “怎么了十电?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)叹螟。 經(jīng)常有香客問(wèn)我鹃骂,道長(zhǎng),這世上最難降的妖魔是什么罢绽? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任畏线,我火速辦了婚禮,結(jié)果婚禮上良价,老公的妹妹穿的比我還像新娘寝殴。我一直安慰自己,他們只是感情好明垢,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布杯矩。 她就那樣靜靜地躺著,像睡著了一般袖外。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上魂务,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天曼验,我揣著相機(jī)與錄音,去河邊找鬼粘姜。 笑死鬓照,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的孤紧。 我是一名探鬼主播豺裆,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼号显!你這毒婦竟也來(lái)了臭猜?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤押蚤,失蹤者是張志新(化名)和其女友劉穎蔑歌,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體揽碘,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡次屠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年园匹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劫灶。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裸违,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出本昏,到底是詐尸還是另有隱情供汛,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布凛俱,位于F島的核電站紊馏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蒲犬。R本人自食惡果不足惜朱监,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望原叮。 院中可真熱鬧赫编,春花似錦、人聲如沸奋隶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)唯欣。三九已至嘹吨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間境氢,已是汗流浹背蟀拷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留萍聊,地道東北人问芬。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像寿桨,于是被迫代替她去往敵國(guó)和親此衅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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

  • 最近做了一次對(duì)企業(yè)/云平臺(tái)級(jí)工作流引擎Activiti的調(diào)查: TA亭螟,系出名門(mén)——由JBoss公司jBPM4引擎的...
    天空之誠(chéng)閱讀 25,407評(píng)論 7 93
  • Activiti框架以其開(kāi)源 的特性挡鞍,作為近年來(lái)迅猛發(fā)展的工作流框架之一。而另一種工作流框架JBPM5目前來(lái)說(shuō)也是...
    CobubRazor閱讀 3,954評(píng)論 1 7
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,302評(píng)論 25 707
  • 最近領(lǐng)導(dǎo)讓我研究下工作流预烙,于是查啊查就查到了Activiti匕累,特么剛開(kāi)始一直查的是Activity,查出來(lái)一堆An...
    影秋閱讀 50,272評(píng)論 9 89
  • 你的存在 不過(guò)是 凌晨驚醒 起身抽的那支煙 深深一口吸進(jìn)去 長(zhǎng)時(shí)間在嘴巴里停留 停留 煙霧吐出來(lái)的那一瞬 分明就是...
    _湫子閱讀 247評(píng)論 0 0