最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java的Flowable工作流之加簽轉(zhuǎn)簽詳解

 更新時(shí)間:2023年11月02日 09:48:17   作者:桐花思雨  
這篇文章主要介紹了Java的Flowable工作流之加簽轉(zhuǎn)簽詳解,Flowable是一個(gè)開源的工作流引擎,它提供了一套強(qiáng)大的工具和功能,用于設(shè)計(jì)、執(zhí)行和管理各種類型的工作流程,需要的朋友可以參考下

1. 加簽

顧名思義就是增加一道審批簽名,這道審批往往是臨時(shí)增加的,標(biāo)準(zhǔn)流程沒有規(guī)定要走的

在現(xiàn)實(shí)工作流程中,加簽功能使用率頗高;有時(shí),審批人對內(nèi)容不太確定,不太敢做主,就會找更高層的領(lǐng)導(dǎo)進(jìn)行加簽;這樣就可以規(guī)避個(gè)人風(fēng)險(xiǎn);出問題大家一起擔(dān)。有時(shí)為了表示對領(lǐng)導(dǎo)尊重,或者讓領(lǐng)導(dǎo)知道這回事,也需要使用加簽功能

1.1. 向前加簽

任務(wù)在 A 這里,A 這個(gè)時(shí)候需要 B 核對一下,等 B 核對之后又回到 A 這里,這時(shí) A 才能繼續(xù)自己的任務(wù)

1.2. 向后加簽

任務(wù)在 A 這里,A 這個(gè)時(shí)候需要 B 處理這個(gè)事情,處理完畢之后就不用管了,繼續(xù)后面的審批環(huán)節(jié)

2. 或簽

或簽:指同一個(gè)任務(wù)審批節(jié)點(diǎn)設(shè)置多個(gè)人,如 A、B、C 三人,三人會同時(shí)收到審批,只要其中任意一人審批即可流轉(zhuǎn)到下一審批節(jié)點(diǎn)

3. 委派和轉(zhuǎn)辦的區(qū)別

3.1. 委派

委派:是將任務(wù)節(jié)點(diǎn)分給其他人處理,等其他人處理好之后,委派任務(wù)還會 自動回到委派人的任務(wù)中

在這里插入圖片描述

3.2. 轉(zhuǎn)辦

直接將辦理人assignee 換成別人,這時(shí)任務(wù)的擁有著不再是轉(zhuǎn)辦人,而是為空,相當(dāng)與將任務(wù)轉(zhuǎn)出

直接將 assignee =” zhuanban” taskService.setAssignee(taskId, userId);

在這里插入圖片描述

4. 向前加簽

4.1. 流程圖

完成后的流程圖如下

在這里插入圖片描述

XML 文件內(nèi)容

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn"
             xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
             xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
             typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath"
             targetNamespace="http://www.flowable.org/processdef" exporter="Flowable Open Source Modeler"
             exporterVersion="6.7.2">
    <process id="Countersign" name="Countersign" isExecutable="true">
        <documentation>flowable的加簽</documentation>
        <startEvent id="sid-D7D95537-998F-4DC4-B951-78708D6DBB98" flowable:formFieldValidation="true"></startEvent>
        <userTask id="qjsqId" name="請假申請單" flowable:assignee="${user}" flowable:formFieldValidation="true">
            <extensionElements>
                <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler">
                    <![CDATA[false]]></modeler:initiator-can-complete>
            </extensionElements>
        </userTask>
        <sequenceFlow id="sid-6B6AF669-F0E8-4D59-892A-162228D0510D" sourceRef="sid-D7D95537-998F-4DC4-B951-78708D6DBB98"
                      targetRef="qjsqId"></sequenceFlow>
        <userTask id="zjlId" name="總經(jīng)理審批" flowable:assignee="${Boss}" flowable:formFieldValidation="true">
            <extensionElements>
                <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler">
                    <![CDATA[false]]></modeler:initiator-can-complete>
            </extensionElements>
        </userTask>
        <sequenceFlow id="sid-A5F5DC0C-5E0B-4A14-B748-CBCFFB98696D" sourceRef="qjsqId" targetRef="zjlId"></sequenceFlow>
        <endEvent id="sid-2C1AB747-3343-41FC-954C-70B992D32D14"></endEvent>
        <sequenceFlow id="sid-8B64D6FD-A229-4E53-B4EB-C86449387AE6" sourceRef="zjlId"
                      targetRef="sid-2C1AB747-3343-41FC-954C-70B992D32D14"></sequenceFlow>
    </process>
    <bpmndi:BPMNDiagram id="BPMNDiagram_Countersign">
        <bpmndi:BPMNPlane bpmnElement="Countersign" id="BPMNPlane_Countersign">
            <bpmndi:BPMNShape bpmnElement="sid-D7D95537-998F-4DC4-B951-78708D6DBB98"
                              id="BPMNShape_sid-D7D95537-998F-4DC4-B951-78708D6DBB98">
                <omgdc:Bounds height="30.0" width="30.0" x="74.0" y="117.0"></omgdc:Bounds>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape bpmnElement="qjsqId" id="BPMNShape_qjsqId">
                <omgdc:Bounds height="80.0" width="100.0" x="225.0" y="92.0"></omgdc:Bounds>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape bpmnElement="zjlId" id="BPMNShape_zjlId">
                <omgdc:Bounds height="80.0" width="100.0" x="450.0" y="92.0"></omgdc:Bounds>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape bpmnElement="sid-2C1AB747-3343-41FC-954C-70B992D32D14"
                              id="BPMNShape_sid-2C1AB747-3343-41FC-954C-70B992D32D14">
                <omgdc:Bounds height="28.0" width="28.0" x="660.0" y="118.0"></omgdc:Bounds>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNEdge bpmnElement="sid-6B6AF669-F0E8-4D59-892A-162228D0510D"
                             id="BPMNEdge_sid-6B6AF669-F0E8-4D59-892A-162228D0510D" flowable:sourceDockerX="15.0"
                             flowable:sourceDockerY="15.0" flowable:targetDockerX="50.0" flowable:targetDockerY="40.0">
                <omgdi:waypoint x="103.94999947166039" y="132.0"></omgdi:waypoint>
                <omgdi:waypoint x="225.0" y="132.0"></omgdi:waypoint>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge bpmnElement="sid-A5F5DC0C-5E0B-4A14-B748-CBCFFB98696D"
                             id="BPMNEdge_sid-A5F5DC0C-5E0B-4A14-B748-CBCFFB98696D" flowable:sourceDockerX="50.0"
                             flowable:sourceDockerY="40.0" flowable:targetDockerX="50.0" flowable:targetDockerY="40.0">
                <omgdi:waypoint x="324.94999999996566" y="132.0"></omgdi:waypoint>
                <omgdi:waypoint x="449.9999999998968" y="132.0"></omgdi:waypoint>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge bpmnElement="sid-8B64D6FD-A229-4E53-B4EB-C86449387AE6"
                             id="BPMNEdge_sid-8B64D6FD-A229-4E53-B4EB-C86449387AE6" flowable:sourceDockerX="50.0"
                             flowable:sourceDockerY="40.0" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
                <omgdi:waypoint x="549.95" y="132.0"></omgdi:waypoint>
                <omgdi:waypoint x="660.0" y="132.0"></omgdi:waypoint>
            </bpmndi:BPMNEdge>
        </bpmndi:BPMNPlane>
    </bpmndi:BPMNDiagram>
</definitions>

4.2. 部署并啟動

// 部署流程
@Test
public void test1() {
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    RepositoryService repositoryService = processEngine.getRepositoryService();

    Deployment deploy = repositoryService.createDeployment()
    		.addClasspathResource("processes/Countersign.bpmn20.xml")
            .name("加簽流程")
            .deploy();
	System.out.println("deploy.getId() = " + deploy.getId());
    System.out.println("deploy.getName() = " + deploy.getName());
}

// 啟動流程
@Test
public void test2() {
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    RuntimeService runtimeService = processEngine.getRuntimeService();

    // 給請假申請單分配用戶
    Map<String, Object> variables = new HashMap<>();
    variables.put("user", "張三");
    ProcessInstance processInstance = runtimeService.startProcessInstanceById("Countersign:2:bf2eeed9-58f1-11ed-8017-005056c00001", variables);
    System.out.println("流程定義的ID:" + processInstance.getProcessDefinitionId());
    System.out.println("流程實(shí)例的ID:" + processInstance.getId());
}

4.3. 完成任務(wù)

張三 完成請假申請單任務(wù)

// 張三完成請假申請單
@Test
public void test3() {
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    TaskService taskService = processEngine.getTaskService();
    Task task = taskService.createTaskQuery()
    		.processInstanceId("57c743b9-58f2-11ed-9a6d-005056c00001")
            .taskAssignee("張三")
            .singleResult();
	// 給總經(jīng)理審批分配用戶
    Map<String, Object> variables = new HashMap<>();
    variables.put("Boss", "周經(jīng)理");
    if (task != null) {
		taskService.complete(task.getId(), variables);
    }
}

查看 ACT_RU_TASK 表數(shù)據(jù)如下,任務(wù)節(jié)點(diǎn)發(fā)生了流轉(zhuǎn);到了總經(jīng)理審批節(jié)點(diǎn)了

在這里插入圖片描述

4.4. 向前加簽實(shí)現(xiàn)

在實(shí)際中會出現(xiàn)特殊情況,如還需要 董事長 審批,但在流程設(shè)計(jì)中并沒有 董事長 這個(gè)流程節(jié)點(diǎn),所以需要用到加簽的功能

4.4.1. 添加加簽(委派)功能任務(wù)

將任務(wù)委托給另一個(gè)人,修改 ACT_RU_TASK 表記錄,硬編碼不推薦

  • 如果任務(wù)所有者字段 OWNER_ 為 null,則將該字段置為任務(wù)的當(dāng)前受理人(如 周經(jīng)理)
  • 委托狀態(tài)字段 DELEGATION_ 變更為 PENDING;DelegationState 是一個(gè)枚舉
  • 當(dāng)前審批人字段 ASSIGNEE_ 變更為被委托人(如 孫董事長)

在這里插入圖片描述

/**
 * 假如流程中出現(xiàn)特殊情況,需要特定的人員進(jìn)行審批后才可以正常的把流程走下去,而這個(gè)特定的人員一開始
 * 并沒有在流程設(shè)計(jì)中體現(xiàn)出來,所以這時(shí)候就需要加簽這個(gè)功能,在某一節(jié)點(diǎn)處添加一個(gè)新的人員來處理這個(gè)流程
 */
@Test
public void test4() {
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    TaskService taskService = processEngine.getTaskService();

    Task task = taskService.createTaskQuery()
    		.processInstanceId("57c743b9-58f2-11ed-9a6d-005056c00001")
            .taskAssignee("周經(jīng)理")
            .singleResult();
    if (task != null) {
    	taskService.delegateTask(task.getId(), "孫董事長");
	}
}

4.4.1. 加簽(委派)任務(wù)的完成

@Test
public void test5() {
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    TaskService taskService = processEngine.getTaskService();

   	Task task = taskService.createTaskQuery()
    		.processInstanceId("57c743b9-58f2-11ed-9a6d-005056c00001")
            .taskAssignee("孫董事長")
            .singleResult();
	if (task != null) {
    	taskService.resolveTask(task.getId());
	}
}

加簽任務(wù)不能用 completeTask() 方法來完成,因?yàn)檫@個(gè)加簽的任務(wù)并不屬于正常流程中的一個(gè)節(jié)點(diǎn)任務(wù),加簽任務(wù)完后,任務(wù)還會回到加簽前的人員手里

查看 ACT_RU_TASK 表數(shù)據(jù)如下,任務(wù)節(jié)點(diǎn)發(fā)生了流轉(zhuǎn);又回到了 總經(jīng)理審批 節(jié)點(diǎn)了

  • 任務(wù)所有者字段 OWNER_ 為 周經(jīng)理
  • 當(dāng)前審批人字段 ASSIGNEE_ 為 周經(jīng)理
  • 委托狀態(tài)字段 DELEGATION_ 變更為 RESOLVED

在這里插入圖片描述

5. 轉(zhuǎn)簽(轉(zhuǎn)辦)

// 轉(zhuǎn)簽:就是把任務(wù)轉(zhuǎn)辦給他人
@Test
public void transferTask() {
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    TaskService taskService = processEngine.getTaskService();
    
    // 直接setAssignee即可
    taskService.setAssignee("90002", "總監(jiān)");
}

到此這篇關(guān)于Java的Flowable工作流之加簽轉(zhuǎn)簽詳解的文章就介紹到這了,更多相關(guān)Flowable工作流加簽轉(zhuǎn)簽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Springboot實(shí)現(xiàn)攔截器的兩種方式

    淺談Springboot實(shí)現(xiàn)攔截器的兩種方式

    本文詳細(xì)的介紹了Springboot攔截器的兩種方式實(shí)現(xiàn),一種就是用攔截器,一種就是過濾器,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java在PowerPoint中添加上標(biāo)和下標(biāo)的實(shí)現(xiàn)方法

    Java在PowerPoint中添加上標(biāo)和下標(biāo)的實(shí)現(xiàn)方法

    當(dāng)我們在演示文稿中添加商標(biāo)、版權(quán)或其他符號時(shí),我們可能希望該符號出現(xiàn)在某個(gè)文本的上方或下方。在Microsoft PowerPoint中,我們可以通過對符號應(yīng)用上標(biāo)或下標(biāo)格式來實(shí)現(xiàn)這種效果,這篇文章主要介紹了Java在PowerPoint中添加上標(biāo)和下標(biāo),需要的朋友可以參考下
    2022-10-10
  • idea中定時(shí)及多數(shù)據(jù)源配置方法

    idea中定時(shí)及多數(shù)據(jù)源配置方法

    因項(xiàng)目要求,需要定時(shí)從達(dá)夢數(shù)據(jù)庫中取數(shù)據(jù),并插入或更新到ORACLE數(shù)據(jù)庫中,這篇文章主要介紹了idea中定時(shí)及多數(shù)據(jù)源配置方法,需要的朋友可以參考下
    2023-12-12
  • Shiro + JWT + SpringBoot應(yīng)用示例代碼詳解

    Shiro + JWT + SpringBoot應(yīng)用示例代碼詳解

    這篇文章主要介紹了Shiro (Shiro + JWT + SpringBoot應(yīng)用),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java Semaphore實(shí)現(xiàn)高并發(fā)場景下的流量控制

    Java Semaphore實(shí)現(xiàn)高并發(fā)場景下的流量控制

    在java開發(fā)的工作中是否會出現(xiàn)這樣的場景,你需要實(shí)現(xiàn)一些異步運(yùn)行的任務(wù),該任務(wù)可能存在消耗大量內(nèi)存的情況,所以需要對任務(wù)進(jìn)行并發(fā)控制。本文將介紹通過Semaphore類優(yōu)雅的實(shí)現(xiàn)并發(fā)控制,感興趣的可以了解一下
    2021-12-12
  • 詳解如何為SpringBoot項(xiàng)目中的自定義配置添加IDE支持

    詳解如何為SpringBoot項(xiàng)目中的自定義配置添加IDE支持

    這篇文章主要介紹了詳解如何為SpringBoot項(xiàng)目中的自定義配置添加IDE支持,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Spring?Boot?Yaml配置高級用法

    Spring?Boot?Yaml配置高級用法

    這篇文章主要介紹了Spring?Boot?Yaml配置高級用法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • SpringBoot統(tǒng)計(jì)接口調(diào)用耗時(shí)的三種方式

    SpringBoot統(tǒng)計(jì)接口調(diào)用耗時(shí)的三種方式

    在實(shí)際開發(fā)中,了解項(xiàng)目中接口的響應(yīng)時(shí)間是必不可少的事情,SpringBoot 項(xiàng)目支持監(jiān)聽接口的功能也不止一個(gè),接下來我們分別以 AOP、ApplicationListener、Tomcat 三個(gè)方面去實(shí)現(xiàn)三種不同的監(jiān)聽接口響應(yīng)時(shí)間的操作,需要的朋友可以參考下
    2024-06-06
  • Spring JPA聯(lián)表查詢之OneToOne源碼詳解

    Spring JPA聯(lián)表查詢之OneToOne源碼詳解

    這篇文章主要為大家介紹了Spring JPA聯(lián)表查詢之OneToOne源碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 詳解Java的橋接方法

    詳解Java的橋接方法

    這篇文章主要介紹了Java 橋接方法的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12

最新評論

桃园市| 东方市| 全椒县| 西乌珠穆沁旗| 泸定县| 大城县| 萨迦县| 盐亭县| 砚山县| 南召县| 吴忠市| 鹿邑县| 三台县| 曲阜市| 金门县| 湾仔区| 眉山市| 威海市| 南召县| 沈丘县| 布尔津县| 蛟河市| 锡林郭勒盟| 顺义区| 上蔡县| 马关县| 石家庄市| 汨罗市| 苍山县| 都江堰市| 南通市| 广东省| 佛山市| 沾益县| 同德县| 永定县| 高密市| 广饶县| 淮滨县| 平阳县| 遂昌县|