5 changed files with 301 additions and 41 deletions
@ -0,0 +1,69 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
||||
|
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" 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" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1567478636229" name="" targetNamespace="http://www.activiti.org/testm1567478636229" typeLanguage="http://www.w3.org/2001/XMLSchema"> |
||||
|
<process id="demoTask" isClosed="false" isExecutable="true" name="测试任务流程" processType="None"> |
||||
|
<startEvent id="_2" name="StartEvent"/> |
||||
|
<endEvent id="_3" name="EndEvent"/> |
||||
|
<userTask activiti:assignee="${deptId}" activiti:exclusive="true" id="_4" name="初次审核"> |
||||
|
<extensionElements> |
||||
|
<activiti:executionListener event="end" expression="审核完成"/> |
||||
|
</extensionElements> |
||||
|
</userTask> |
||||
|
<userTask activiti:assignee="${deptId}" activiti:exclusive="true" id="_5" name="二次审核"> |
||||
|
<extensionElements> |
||||
|
<activiti:executionListener event="end" expression="审核完成"/> |
||||
|
</extensionElements> |
||||
|
</userTask> |
||||
|
<sequenceFlow id="_6" sourceRef="_2" targetRef="_4"/> |
||||
|
<sequenceFlow id="_7" sourceRef="_4" targetRef="_5"/> |
||||
|
<sequenceFlow id="_8" sourceRef="_5" targetRef="_3"/> |
||||
|
</process> |
||||
|
<bpmndi:BPMNDiagram documentation="background=#FFFFFF;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0" id="Diagram-_1" name="New Diagram"> |
||||
|
<bpmndi:BPMNPlane bpmnElement="demoTask"> |
||||
|
<bpmndi:BPMNShape bpmnElement="_2" id="Shape-_2"> |
||||
|
<dc:Bounds height="32.0" width="32.0" x="370.0" y="60.0"/> |
||||
|
<bpmndi:BPMNLabel> |
||||
|
<dc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/> |
||||
|
</bpmndi:BPMNLabel> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNShape bpmnElement="_3" id="Shape-_3"> |
||||
|
<dc:Bounds height="32.0" width="32.0" x="375.0" y="640.0"/> |
||||
|
<bpmndi:BPMNLabel> |
||||
|
<dc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/> |
||||
|
</bpmndi:BPMNLabel> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNShape bpmnElement="_4" id="Shape-_4"> |
||||
|
<dc:Bounds height="55.0" width="85.0" x="350.0" y="225.0"/> |
||||
|
<bpmndi:BPMNLabel> |
||||
|
<dc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/> |
||||
|
</bpmndi:BPMNLabel> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNShape bpmnElement="_5" id="Shape-_5"> |
||||
|
<dc:Bounds height="55.0" width="85.0" x="355.0" y="415.0"/> |
||||
|
<bpmndi:BPMNLabel> |
||||
|
<dc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/> |
||||
|
</bpmndi:BPMNLabel> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNEdge bpmnElement="_6" id="BPMNEdge__6" sourceElement="_2" targetElement="_4"> |
||||
|
<di:waypoint x="386.0" y="92.0"/> |
||||
|
<di:waypoint x="386.0" y="225.0"/> |
||||
|
<bpmndi:BPMNLabel> |
||||
|
<dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> |
||||
|
</bpmndi:BPMNLabel> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge bpmnElement="_7" id="BPMNEdge__7" sourceElement="_4" targetElement="_5"> |
||||
|
<di:waypoint x="395.0" y="280.0"/> |
||||
|
<di:waypoint x="395.0" y="415.0"/> |
||||
|
<bpmndi:BPMNLabel> |
||||
|
<dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> |
||||
|
</bpmndi:BPMNLabel> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge bpmnElement="_8" id="BPMNEdge__8" sourceElement="_5" targetElement="_3"> |
||||
|
<di:waypoint x="391.0" y="470.0"/> |
||||
|
<di:waypoint x="391.0" y="640.0"/> |
||||
|
<bpmndi:BPMNLabel> |
||||
|
<dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> |
||||
|
</bpmndi:BPMNLabel> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
</bpmndi:BPMNPlane> |
||||
|
</bpmndi:BPMNDiagram> |
||||
|
</definitions> |
@ -1,43 +1,50 @@ |
|||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
||||
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" |
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.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" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1566628843418" name="" targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema"> |
||||
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" |
<process id="myProcess_1" isClosed="false" isExecutable="true" processType="None"> |
||||
xmlns:activiti="http://activiti.org/bpmn" |
<startEvent id="_2" name="testTaskStart"/> |
||||
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" |
<endEvent id="_6" name="testTaskEnd"/> |
||||
xmlns:tns="http://www.activiti.org/test" |
<userTask activiti:exclusive="true" id="_11" name="UserTask"> |
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema" |
|
||||
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" |
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
|
||||
expressionLanguage="http://www.w3.org/1999/XPath" |
|
||||
id="m1566628843418" |
|
||||
name="" |
|
||||
targetNamespace="http://www.activiti.org/test" |
|
||||
typeLanguage="http://www.w3.org/2001/XMLSchema"> |
|
||||
<process xmlns="" id="myProcess_1" isClosed="false" isExecutable="true" |
|
||||
processType="None"> |
|
||||
<startEvent id="_2" name="开始"/> |
|
||||
<userTask activiti:exclusive="true" id="_3" name="UserTask"> |
|
||||
<extensionElements> |
<extensionElements> |
||||
<activiti:taskListener event="create"/> |
<activiti:executionListener event="start" expression="test"/> |
||||
</extensionElements> |
</extensionElements> |
||||
</userTask> |
</userTask> |
||||
|
<sequenceFlow id="_13" sourceRef="_2" targetRef="_11"/> |
||||
|
<sequenceFlow id="_14" sourceRef="_11" targetRef="_6"/> |
||||
</process> |
</process> |
||||
<bpmndi:BPMNDiagram xmlns="" |
<bpmndi:BPMNDiagram documentation="background=#3C3F41;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0" id="Diagram-_1" name="New Diagram"> |
||||
documentation="background=#3C3F41;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0" |
|
||||
id="Diagram-_1" |
|
||||
name="New Diagram"> |
|
||||
<bpmndi:BPMNPlane bpmnElement="myProcess_1"> |
<bpmndi:BPMNPlane bpmnElement="myProcess_1"> |
||||
<bpmndi:BPMNShape bpmnElement="_2" id="Shape-_2"> |
<bpmndi:BPMNShape bpmnElement="_2" id="Shape-_2"> |
||||
<omgdc:Bounds height="32.0" width="32.0" x="245.0" y="100.0"/> |
<omgdc:Bounds height="32.0" width="32.0" x="290.0" y="55.0"/> |
||||
<bpmndi:BPMNLabel> |
<bpmndi:BPMNLabel> |
||||
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/> |
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/> |
||||
</bpmndi:BPMNLabel> |
</bpmndi:BPMNLabel> |
||||
</bpmndi:BPMNShape> |
</bpmndi:BPMNShape> |
||||
<bpmndi:BPMNShape bpmnElement="_3" id="Shape-_3"> |
<bpmndi:BPMNShape bpmnElement="_6" id="Shape-_6"> |
||||
<omgdc:Bounds height="55.0" width="85.0" x="255.0" y="200.0"/> |
<omgdc:Bounds height="32.0" width="32.0" x="285.0" y="515.0"/> |
||||
|
<bpmndi:BPMNLabel> |
||||
|
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/> |
||||
|
</bpmndi:BPMNLabel> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNShape bpmnElement="_11" id="Shape-_11"> |
||||
|
<omgdc:Bounds height="55.0" width="85.0" x="530.0" y="240.0"/> |
||||
<bpmndi:BPMNLabel> |
<bpmndi:BPMNLabel> |
||||
<omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/> |
<omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/> |
||||
</bpmndi:BPMNLabel> |
</bpmndi:BPMNLabel> |
||||
</bpmndi:BPMNShape> |
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNEdge bpmnElement="_13" id="BPMNEdge__13" sourceElement="_2" targetElement="_11"> |
||||
|
<omgdi:waypoint x="322.0" y="71.0"/> |
||||
|
<omgdi:waypoint x="530.0" y="267.5"/> |
||||
|
<bpmndi:BPMNLabel> |
||||
|
<omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> |
||||
|
</bpmndi:BPMNLabel> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge bpmnElement="_14" id="BPMNEdge__14" sourceElement="_11" targetElement="_6"> |
||||
|
<omgdi:waypoint x="530.0" y="267.5"/> |
||||
|
<omgdi:waypoint x="317.0" y="531.0"/> |
||||
|
<bpmndi:BPMNLabel> |
||||
|
<omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> |
||||
|
</bpmndi:BPMNLabel> |
||||
|
</bpmndi:BPMNEdge> |
||||
</bpmndi:BPMNPlane> |
</bpmndi:BPMNPlane> |
||||
</bpmndi:BPMNDiagram> |
</bpmndi:BPMNDiagram> |
||||
</definitions> |
</definitions> |
||||
|
@ -0,0 +1,24 @@ |
|||||
|
package com.elink.esua.epdc.service; |
||||
|
|
||||
|
/** |
||||
|
* activiti工作流 |
||||
|
* |
||||
|
* @author yujintao |
||||
|
* @email yujintao@elink-cn.com |
||||
|
* @date 2019/9/3 11:18 |
||||
|
*/ |
||||
|
public interface ActWorkflowCommonService { |
||||
|
|
||||
|
/** |
||||
|
* 启动流程并绑定任务 |
||||
|
* |
||||
|
* @param processKey 流程ID |
||||
|
* @param businessKey 任务ID |
||||
|
* @param deptId 部门ID(通过部门ID,判断是否有权限审核任务) |
||||
|
* @return boolean |
||||
|
* @author yujintao |
||||
|
* @date 2019/9/3 13:58 |
||||
|
*/ |
||||
|
boolean startProcess(String processKey, String businessKey, String deptId); |
||||
|
|
||||
|
} |
@ -0,0 +1,50 @@ |
|||||
|
package com.elink.esua.epdc.service.impl; |
||||
|
|
||||
|
import com.elink.esua.epdc.service.ActWorkflowCommonService; |
||||
|
import com.google.common.collect.Maps; |
||||
|
import org.activiti.engine.HistoryService; |
||||
|
import org.activiti.engine.RepositoryService; |
||||
|
import org.activiti.engine.RuntimeService; |
||||
|
import org.activiti.engine.TaskService; |
||||
|
import org.activiti.engine.runtime.ProcessInstance; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.web.context.ContextLoader; |
||||
|
import org.springframework.web.context.WebApplicationContext; |
||||
|
|
||||
|
import java.util.HashMap; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* @author yujintao |
||||
|
* @email yujintao@elink-cn.com |
||||
|
* @date 2019/9/3 11:19 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class ActWorkflowCommonServiceImpl implements ActWorkflowCommonService { |
||||
|
|
||||
|
@Autowired |
||||
|
private RepositoryService repositoryService; |
||||
|
|
||||
|
@Autowired |
||||
|
private RuntimeService runtimeService; |
||||
|
|
||||
|
@Autowired |
||||
|
private TaskService taskService; |
||||
|
|
||||
|
@Autowired |
||||
|
private HistoryService historyService; |
||||
|
|
||||
|
@Override |
||||
|
public boolean startProcess(String processKey, String businessKey, String deptId) { |
||||
|
Map<String, Object> map = Maps.newHashMap(); |
||||
|
map.put("deptId", deptId); |
||||
|
map.put("activityId", "_2"); |
||||
|
//使用正在执行对象表中的一个字段BUSINESS_KEY(Activiti提供的一个字段),让启动的流程(流程实例)关联业务
|
||||
|
runtimeService.startProcessInstanceByKey(processKey, businessKey, map); |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,110 @@ |
|||||
|
package com.elink.esua.epdc; |
||||
|
|
||||
|
import com.elink.esua.epdc.service.ActWorkflowCommonService; |
||||
|
import com.google.common.collect.Maps; |
||||
|
import org.activiti.engine.RuntimeService; |
||||
|
import org.activiti.engine.TaskService; |
||||
|
import org.activiti.engine.runtime.ProcessInstance; |
||||
|
import org.activiti.engine.task.Task; |
||||
|
import org.activiti.engine.task.TaskQuery; |
||||
|
import org.junit.Test; |
||||
|
import org.junit.runner.RunWith; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.boot.test.context.SpringBootTest; |
||||
|
import org.springframework.test.context.junit4.SpringRunner; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
/** |
||||
|
* @author yujintao |
||||
|
* @email yujintao@elink-cn.com |
||||
|
* @date 2019/9/3 10:06 |
||||
|
*/ |
||||
|
@RunWith(SpringRunner.class) |
||||
|
@SpringBootTest |
||||
|
public class ActivitiTest { |
||||
|
|
||||
|
@Autowired |
||||
|
private ActWorkflowCommonService actWorkflowCommonService; |
||||
|
|
||||
|
@Autowired |
||||
|
private TaskService taskService; |
||||
|
|
||||
|
@Autowired |
||||
|
private RuntimeService runtimeService; |
||||
|
|
||||
|
@Test |
||||
|
public void test() { |
||||
|
String processId = "demoTask"; |
||||
|
// 启动一个任务流程
|
||||
|
actWorkflowCommonService.startProcess(processId, "testBusinessKey3", "testDeptId"); |
||||
|
} |
||||
|
|
||||
|
@Test |
||||
|
public void test2() { |
||||
|
String processId = "demoTask"; |
||||
|
String deptId = "testDeptId"; |
||||
|
this.queryTask(processId, deptId); |
||||
|
/* |
||||
|
关联业务id:testBusinessKey |
||||
|
流程实例id:5001 |
||||
|
任务id:5006 |
||||
|
任务标识:_4 |
||||
|
任务负责人:testDeptId |
||||
|
任务名称:初次审核 |
||||
|
任务创建时间:Tue Sep 03 14:26:50 CST 2019 |
||||
|
*/ |
||||
|
} |
||||
|
|
||||
|
@Test |
||||
|
public void test3() { |
||||
|
Map<String, Object> map = Maps.newHashMap(); |
||||
|
map.put("deptId", "testDeptId2"); |
||||
|
taskService.complete("5006", map); |
||||
|
} |
||||
|
|
||||
|
@Test |
||||
|
public void test4() { |
||||
|
String processId = "demoTask"; |
||||
|
String deptId = "testDeptId2"; |
||||
|
this.queryTask(processId, deptId); |
||||
|
/* |
||||
|
关联业务id:testBusinessKey |
||||
|
流程实例id:5001 |
||||
|
任务id:7502 |
||||
|
任务标识:_5 |
||||
|
任务负责人:testDeptId2 |
||||
|
任务名称:二次审核 |
||||
|
任务创建时间:Tue Sep 03 14:49:29 CST 2019 |
||||
|
*/ |
||||
|
} |
||||
|
|
||||
|
|
||||
|
private void queryTask(String processId, String deptId) { |
||||
|
//创建查询对象
|
||||
|
TaskQuery taskQuery = taskService.createTaskQuery().taskAssignee(deptId).processDefinitionKey(processId); |
||||
|
//获取查询列表
|
||||
|
List<Task> list = taskQuery.list(); |
||||
|
|
||||
|
for (Task task : list) { |
||||
|
//流程实例id
|
||||
|
String processInstanceId = task.getProcessInstanceId(); |
||||
|
//根据流程实例id找到流程实例对象
|
||||
|
ProcessInstance processInstance = runtimeService |
||||
|
.createProcessInstanceQuery() |
||||
|
.processInstanceId(processInstanceId) |
||||
|
.singleResult(); |
||||
|
//从流程实例对象获取bussinesskey
|
||||
|
String businessKey = processInstance.getBusinessKey(); |
||||
|
//根据businessKey查询业务系统,获取相关的业务信息
|
||||
|
System.out.println("关联业务id:" + businessKey); |
||||
|
System.out.println("流程实例id:" + task.getProcessInstanceId()); |
||||
|
System.out.println("任务id:" + task.getId()); |
||||
|
System.out.println("任务标识:" + task.getTaskDefinitionKey()); |
||||
|
System.out.println("任务负责人:" + task.getAssignee()); |
||||
|
System.out.println("任务名称:" + task.getName()); |
||||
|
System.out.println("任务创建时间:" + task.getCreateTime()); |
||||
|
} |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue