002.camunda入門(一個流程的欣賞)

目標(biāo)

創(chuàng)建一個大眾流程(請假流程)并且可以跑起來仇参。

需要的預(yù)備知識

camunda數(shù)據(jù)庫表的基本認(rèn)識 表介紹鏈接

流程圖的制作

  1. 下載camunda的繪圖工具 流程圖工具地址
  2. 繪制請假流程圖(XML去掉了布局元素)


    請假流程圖.png
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0vl15c1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.2.0">
  <bpmn:process id="Process_007jh58" isExecutable="true">
    <bpmn:startEvent id="StartEvent_1">
      <bpmn:outgoing>Flow_1l7o4ts</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:sequenceFlow id="Flow_1l7o4ts" sourceRef="StartEvent_1" targetRef="Activity_1almw37" />
    <bpmn:exclusiveGateway id="Gateway_1l7w1cq">
      <bpmn:incoming>Flow_05ef0ej</bpmn:incoming>
      <bpmn:outgoing>Flow_16oi0x8</bpmn:outgoing>
      <bpmn:outgoing>Flow_1yq2gkb</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:sequenceFlow id="Flow_16oi0x8" name="小于等于7天" sourceRef="Gateway_1l7w1cq" targetRef="Activity_0kms1lj">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${ts &lt;= 7}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="Flow_1yq2gkb" name="大于七天" sourceRef="Gateway_1l7w1cq" targetRef="Activity_0uw0hfc">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${ts &gt; 7}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:exclusiveGateway id="Gateway_1sx3v29">
      <bpmn:incoming>Flow_0808fzz</bpmn:incoming>
      <bpmn:incoming>Flow_0y6yarx</bpmn:incoming>
      <bpmn:outgoing>Flow_122u7os</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:sequenceFlow id="Flow_0808fzz" sourceRef="Activity_0kms1lj" targetRef="Gateway_1sx3v29" />
    <bpmn:sequenceFlow id="Flow_0y6yarx" sourceRef="Activity_0uw0hfc" targetRef="Gateway_1sx3v29" />
    <bpmn:userTask id="Activity_1almw37" name="申請人" camunda:assignee="sqr">
      <bpmn:incoming>Flow_1l7o4ts</bpmn:incoming>
      <bpmn:outgoing>Flow_15p6u4g</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:sequenceFlow id="Flow_15p6u4g" sourceRef="Activity_1almw37" targetRef="Activity_1wm4vx9" />
    <bpmn:sequenceFlow id="Flow_05ef0ej" sourceRef="Activity_1wm4vx9" targetRef="Gateway_1l7w1cq" />
    <bpmn:sequenceFlow id="Flow_122u7os" sourceRef="Gateway_1sx3v29" targetRef="Activity_01orex7" />
    <bpmn:endEvent id="Event_0cuwhfb">
      <bpmn:incoming>Flow_0zfntyp</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="Flow_0zfntyp" sourceRef="Activity_01orex7" targetRef="Event_0cuwhfb" />
    <bpmn:userTask id="Activity_1wm4vx9" name="申請人上級" camunda:assignee="sjld">
      <bpmn:incoming>Flow_15p6u4g</bpmn:incoming>
      <bpmn:outgoing>Flow_05ef0ej</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:userTask id="Activity_0kms1lj" name="人事經(jīng)理" camunda:assignee="rsjl">
      <bpmn:incoming>Flow_16oi0x8</bpmn:incoming>
      <bpmn:outgoing>Flow_0808fzz</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:userTask id="Activity_0uw0hfc" name="人事總監(jiān)" camunda:assignee="rszj">
      <bpmn:incoming>Flow_1yq2gkb</bpmn:incoming>
      <bpmn:outgoing>Flow_0y6yarx</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:userTask id="Activity_01orex7" name="歸檔" camunda:assignee="sqr">
      <bpmn:incoming>Flow_122u7os</bpmn:incoming>
      <bpmn:outgoing>Flow_0zfntyp</bpmn:outgoing>
    </bpmn:userTask>
  </bpmn:process>
</bpmn:definitions>

流程的部署

  1. 復(fù)制如上的流程圖xml信息到classpath目錄下
  2. 部署流程
    /**
     * 部署bpmn旁理。xml資源文件
     */
    public void bpmnImport() {
        Deployment deploy = repositoryService
                .createDeployment()
               // .name("請假申請")
                .addClasspathResource("diagram_1.bpmn")
                .deploy();
        log.info(deploy.getName());
        log.info(deploy.getId());
    }

運(yùn)行后如下表會一些基本信息


運(yùn)行后結(jié)果-未設(shè)置name.png
運(yùn)行后結(jié)果-設(shè)置name.png

流程的運(yùn)行

    /**
     * 開始一個流程實(shí)例
     */
    public void startBpm(String proInsId) {
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(proInsId);
        String id = processInstance.getId();
        log.info(id);
    }
流程運(yùn)行結(jié)果.png

流程的審批

 /**
     * 完成一個任務(wù) 不帶參數(shù)
     * @param taskId
     */
    public void comTask(String taskId) {
       taskService.complete(taskId);
    }
運(yùn)行結(jié)果
 /**
     * 完成一個任務(wù)先誉, 并且可以設(shè)置變量參數(shù)
     * @param taskId
     */
    public void comTask(String taskId, Map map) {
        taskService.complete(taskId, map);
    }
帶參數(shù)測試結(jié)果

結(jié)束語

至此一個簡單固定的流程就可以成功完成!

示例代碼

服務(wù)代碼

@Slf4j
@Service
public class ResService {

    @Autowired
    private RepositoryService repositoryService;
    @Autowired
    private RuntimeService runtimeService;
    @Autowired
    private TaskService taskService;

    /**
     * 部署bpmn匿值。xml資源文件
     */
    public void bpmnImport() {
        Deployment deploy = repositoryService
                .createDeployment()
                .name("請假申請")
                .addClasspathResource("diagram_1.bpmn")
                .deploy();
        log.info(deploy.getName());
        log.info(deploy.getId());
    }
    /**
     * 開始一個流程實(shí)例
     */
    public void startBpm(String proInsId) {
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(proInsId);
        String id = processInstance.getId();
        log.info(id);
    }
    /**
     * 完成一個任務(wù) 不帶參數(shù)
     * @param taskId
     */
    public void comTask(String taskId) {
       taskService.complete(taskId);
    }
    /**
     * 完成一個任務(wù), 并且可以設(shè)置變量參數(shù)
     * @param taskId
     */
    public void comTask(String taskId, Map map) {
        taskService.complete(taskId, map);
    }
}

測試類代碼

@RunWith(SpringRunner.class)
@SpringBootTest
class ResServiceTest {

    @Autowired
    private ResService resService;

    /**
     * 測試導(dǎo)入classpath下的bpmn資源
     */
    @Test
    void bpmnImport() {
        resService.bpmnImport();
    }

    /**
     * 開始一個流程實(shí)例, xml標(biāo)簽內(nèi)的bpmn:process id="Process_007jh58"
     */
    @Test
    void startBpm() {
        resService.startBpm("Process_007jh58");
    }

    /**
     * 完成一個任務(wù)
     */
    @Test
    void comTask() {
        resService.comTask("f4bc7a2a-0a0c-11eb-9b55-c81f66132ec7");
    }

    /**
     * 完成一個任務(wù)髓窜, 帶參數(shù)比如此流程的分叉需要判斷請假天數(shù), 我們需要傳入當(dāng)前的變量天數(shù)
     */
    @Test
    void comTask1() {
        Map map = new HashMap();
        map.put("ts", 8);
        resService.comTask("5cbe9b2b-0a0d-11eb-9439-c81f66132ec7", map);
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末欺殿,一起剝皮案震驚了整個濱河市寄纵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脖苏,老刑警劉巖程拭,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異棍潘,居然都是意外死亡恃鞋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門亦歉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恤浪,“玉大人,你說我怎么就攤上這事肴楷∷桑” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵赛蔫,是天一觀的道長砂客。 經(jīng)常有香客問我直秆,道長,這世上最難降的妖魔是什么鞭盟? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任圾结,我火速辦了婚禮,結(jié)果婚禮上齿诉,老公的妹妹穿的比我還像新娘筝野。我一直安慰自己,他們只是感情好粤剧,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布歇竟。 她就那樣靜靜地躺著,像睡著了一般抵恋。 火紅的嫁衣襯著肌膚如雪焕议。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天弧关,我揣著相機(jī)與錄音盅安,去河邊找鬼。 笑死世囊,一個胖子當(dāng)著我的面吹牛别瞭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播株憾,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼蝙寨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嗤瞎?” 一聲冷哼從身側(cè)響起墙歪,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贝奇,沒想到半個月后虹菲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弃秆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年届惋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菠赚。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡创千,死狀恐怖柿冲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜘腌,我是刑警寧澤必盖,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布拌牲,位于F島的核電站俱饿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏塌忽。R本人自食惡果不足惜拍埠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望土居。 院中可真熱鬧枣购,春花似錦、人聲如沸擦耀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽眷蜓。三九已至分瘾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吁系,已是汗流浹背德召。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留汽纤,地道東北人氏捞。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像冒版,于是被迫代替她去往敵國和親液茎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344