流程demo

This commit is contained in:
wenc000 2020-03-25 10:37:46 +08:00
parent dbac5656aa
commit 8b66e84f1e
7 changed files with 424 additions and 47 deletions

View File

@ -0,0 +1,118 @@
package com.cm.inspection.controller.deploy;
import com.alibaba.fastjson.JSONArray;
import com.cm.common.constants.ISystemConstant;
import com.cm.common.result.SuccessResult;
import com.cm.common.result.SuccessResultData;
import com.cm.inspection.service.deploy.IDeployProcessService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
*
* @ClassName: DemoController
* @Description:
* @Author: WangGeng
* @Date: 2020/3/24 9:41 上午
* @Version: 1.0
**/
@RestController
@RequestMapping(ISystemConstant.API_PREFIX + "/deploy")
public class DeployController {
@Autowired
private IDeployProcessService deployProcessService;
/**
* 部署流程
*
* @param processName
* @return
*/
@GetMapping("getdeployprocess/{processName}")
public SuccessResult getDeployProcess(@PathVariable("processName") String processName) {
return deployProcessService.deployProcess(processName);
}
/**
* 执行流程
*
* @param processId
* @return
*/
@GetMapping("getstartprocess/{processId}")
public SuccessResult getStartProcess(@PathVariable("processId") String processId) {
return deployProcessService.startProcess(processId);
}
/**
* 通过代理人查看任务
*
* @param assignee
* @return
*/
@GetMapping("listtaskbyassignee")
public JSONArray listTaskByAssignee(String assignee) {
return deployProcessService.listTaskByAssignee(assignee);
}
/**
* 完成任务
*
* @param taskId
* @return
*/
@GetMapping("gettaskcompletebytaskid/{taskId}")
public SuccessResult getTaskCompleteByTaskId(@PathVariable("taskId") String taskId) {
return deployProcessService.saveTaskCompleteByTaskId(taskId);
}
@PostMapping("saveleavefulltaskcompletebytaskidanddays/{taskId}")
public SuccessResult saveLeaveFullTaskCompleteByTaskIdAndDays(@PathVariable("taskId") String taskId, @RequestParam("days") Integer days) {
return deployProcessService.saveLeaveFullTaskCompleteByTaskIdAndDays(taskId, days);
}
/**
* 正在运行的任务
*
* @return
*/
@GetMapping("listtask")
public JSONArray listTask() {
return deployProcessService.listTask();
}
/**
* 实例状态
*
* @param processId
* @return
*/
@GetMapping("getinstancestatus/{processId}")
public SuccessResultData<Integer> getInstanceStatus(@PathVariable("processId") String processId) {
return deployProcessService.getInstanceStatus(processId);
}
/**
* 历史流程
*
* @return
*/
@GetMapping("listhistoryprocess")
public JSONArray listHistoryProcess() {
return deployProcessService.listHistoryProcess();
}
/**
* 历史任务
*
* @return
*/
@GetMapping("listhistorytask")
public JSONArray listHistoryTask() {
return deployProcessService.listHistoryTask();
}
}

View File

@ -1,5 +1,12 @@
package com.cm.inspection.service.deploy; package com.cm.inspection.service.deploy;
import com.alibaba.fastjson.JSONArray;
import com.cm.common.result.SuccessResult;
import com.cm.common.result.SuccessResultData;
import org.activiti.engine.task.Task;
import java.util.List;
/** /**
* When you feel like quitting. Think about why you started * When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始 * 当你想要放弃的时候想想当初你为何开始
@ -14,4 +21,23 @@ public interface IDeployProcessService {
void deployProcess(); void deployProcess();
SuccessResult deployProcess(String processName);
SuccessResult startProcess(String processId);
JSONArray listTaskByAssignee(String assignee);
SuccessResult saveTaskCompleteByTaskId(String taskId);
SuccessResult saveLeaveFullTaskCompleteByTaskIdAndDays(String taskId, Integer days);
JSONArray listTask();
SuccessResultData<Integer> getInstanceStatus(String processId);
JSONArray listHistoryProcess();
JSONArray listHistoryTask();
} }

View File

@ -1,10 +1,24 @@
package com.cm.inspection.service.deploy.impl; package com.cm.inspection.service.deploy.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cm.common.result.SuccessResult;
import com.cm.common.result.SuccessResultData;
import com.cm.inspection.service.deploy.IDeployProcessService; import com.cm.inspection.service.deploy.IDeployProcessService;
import org.activiti.engine.*; import org.activiti.engine.*;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* When you feel like quitting. Think about why you started * When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始 * 当你想要放弃的时候想想当初你为何开始
@ -31,6 +45,108 @@ public class DeployProcessServiceImpl implements IDeployProcessService {
@Override @Override
public void deployProcess() { public void deployProcess() {
repositoryService.createDeployment().addClasspathResource("bpmn/leave.bpmn").addClasspathResource("bpmn/leave.png").name("test").deploy(); repositoryService.createDeployment().addClasspathResource("bpmn/leave.bpmn").name("test").deploy();
}
@Override
public SuccessResult deployProcess(String processName) {
Deployment deployment = repositoryService.createDeployment()
.disableSchemaValidation()
.addClasspathResource("bpmn/" + processName + ".bpmn").name("请假").deploy();
System.out.println("部署ID" + deployment.getId());
System.out.println("部署Name" + deployment.getName());
return new SuccessResult();
}
@Override
public SuccessResult startProcess(String processId) {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processId);
System.out.println("流程实例id" + processInstance.getId());
System.out.println("流程定义id" + processInstance.getProcessDefinitionId());
return new SuccessResult();
}
@Override
public JSONArray listTaskByAssignee(String assignee) {
TaskQuery taskQuery = taskService.createTaskQuery();
List<Task> taskList = taskQuery.taskAssignee(assignee).list();
JSONArray jsonArray = new JSONArray();
for (Task task : taskList) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("assignee", task.getAssignee());
jsonObject.put("id", task.getId());
jsonObject.put("name", task.getName());
jsonArray.add(jsonObject);
}
return jsonArray;
}
@Override
public SuccessResult saveTaskCompleteByTaskId(String taskId) {
taskService.complete(taskId);
return new SuccessResult();
}
@Override
public SuccessResult saveLeaveFullTaskCompleteByTaskIdAndDays(String taskId, Integer days) {
Map<String, Object> params = new HashMap<>(1);
params.put("days", days);
taskService.complete(taskId, params);
return new SuccessResult();
}
@Override
public JSONArray listTask() {
TaskQuery taskQuery = taskService.createTaskQuery();
List<Task> taskList = taskQuery.list();
JSONArray jsonArray = new JSONArray();
for (Task task : taskList) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("assignee", task.getAssignee());
jsonObject.put("id", task.getId());
jsonObject.put("name", task.getName());
jsonArray.add(jsonObject);
}
return jsonArray;
}
@Override
public SuccessResultData<Integer> getInstanceStatus(String processId) {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processDefinitionKey(processId).singleResult();
return new SuccessResultData<>(processInstance == null ? 1 : 0);
}
@Override
public JSONArray listHistoryProcess() {
List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().list();
JSONArray jsonArray = new JSONArray();
for (HistoricProcessInstance historicProcessInstance : list) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("id", historicProcessInstance.getId());
jsonObject.put("name", historicProcessInstance.getName());
jsonObject.put("startTime", historicProcessInstance.getStartTime());
jsonObject.put("endTime", historicProcessInstance.getEndTime());
jsonArray.add(jsonObject);
}
return jsonArray;
}
@Override
public JSONArray listHistoryTask() {
List<HistoricTaskInstance> taskInstanceList = historyService.createHistoricTaskInstanceQuery().list();
JSONArray jsonArray = new JSONArray();
for (HistoricTaskInstance historicTaskInstance : taskInstanceList) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("id", historicTaskInstance.getId());
jsonObject.put("name", historicTaskInstance.getName());
jsonObject.put("startTime", historicTaskInstance.getStartTime());
jsonObject.put("endTime", historicTaskInstance.getEndTime());
jsonObject.put("processId", historicTaskInstance.getProcessDefinitionId());
jsonObject.put("assignee", historicTaskInstance.getAssignee());
jsonObject.put("executionId", historicTaskInstance.getExecutionId());
jsonObject.put("parentTaskId", historicTaskInstance.getParentTaskId());
jsonArray.add(jsonObject);
}
return jsonArray;
} }
} }

View File

@ -1,7 +1,7 @@
server: server:
port: 7006 port: 7006
url: http://192.168.0.113:7006/inspection url: http://192.168.0.106:7006/inspection
title: inspection title: 隐患上报系统
servlet: servlet:
context-path: /inspection context-path: /inspection
@ -78,11 +78,11 @@ file:
# 安全 # 安全
security: security:
oauth2: oauth2:
oauth-server: http://192.168.0.113:7001/usercenter oauth-server: http://192.168.0.106:7001/usercenter
oauth-logout: ${security.oauth2.oauth-server}/logout?redirect_uri=${server.url} oauth-logout: ${security.oauth2.oauth-server}/logout?redirect_uri=${server.url}
client: client:
client-id: 89e9c099c0a24e7f90d3cdc0447a86b3 client-id: 32ec344a5fd04fd9911586df5d1dc36b
client-secret: VlQ1WE53RDZ6QVJLaHd2b1dGMUdEdGFjYTRhVHUyOHNpQzZoVzE3V1NDOG1ac2wwZTJHWk5NbXh3L3h3U2c4Rg== client-secret: a2NORTAyZmthdTNtVHNwLytGVVo0ckFhNktHQU9JWVFmUks0TGw5L2hQRW1ac2wwZTJHWk5NbXh3L3h3U2c4Rg==
user-authorization-uri: ${security.oauth2.oauth-server}/oauth/authorize user-authorization-uri: ${security.oauth2.oauth-server}/oauth/authorize
access-token-uri: ${security.oauth2.oauth-server}/oauth/token access-token-uri: ${security.oauth2.oauth-server}/oauth/token
grant-type: authorization_code grant-type: authorization_code

View File

@ -12,77 +12,76 @@
name="" name=""
targetNamespace="http://www.activiti.org/test" targetNamespace="http://www.activiti.org/test"
typeLanguage="http://www.w3.org/2001/XMLSchema"> typeLanguage="http://www.w3.org/2001/XMLSchema">
<process xmlns="" id="myProcess_1" isClosed="false" isExecutable="true" <process xmlns="" id="leave" isClosed="false" isExecutable="true" processType="None">
processType="None"> <startEvent id="_14" name="StartEvent"/>
<startEvent id="_2" name="StartEvent"/> <userTask activiti:assignee="zhangsan" activiti:exclusive="true" id="_15" name="申请请假"/>
<userTask activiti:assignee="zhangsan" activiti:exclusive="true" id="_3" name="填写申请å<C2B7>?"/> <userTask activiti:assignee="lisi" activiti:exclusive="true" id="_16" name="审批【副主任】"/>
<userTask activiti:assignee="lisi" activiti:exclusive="true" id="_4" name="部门ç»<C3A7>ç<EFBFBD>†å®¡æ‰¹"/> <sequenceFlow id="_2" sourceRef="_14" targetRef="_15"/>
<userTask activiti:assignee="wangwu" activiti:exclusive="true" id="_5" name="总ç»<C3A7>ç<EFBFBD>†å®¡æ‰?"/> <sequenceFlow id="_3" sourceRef="_15" targetRef="_16"/>
<endEvent id="_6" name="EndEvent"/> <endEvent id="_4" name="EndEvent"/>
<sequenceFlow id="_7" sourceRef="_2" targetRef="_3"/> <userTask activiti:assignee="wangwu" activiti:exclusive="true" id="_5" name="审核"/>
<sequenceFlow id="_8" sourceRef="_3" targetRef="_4"/> <sequenceFlow id="_6" sourceRef="_16" targetRef="_5"/>
<sequenceFlow id="_9" sourceRef="_4" targetRef="_5"/> <sequenceFlow id="_7" sourceRef="_5" targetRef="_4"/>
<sequenceFlow id="_10" sourceRef="_5" targetRef="_6"/>
</process> </process>
<bpmndi:BPMNDiagram xmlns="" <bpmndi:BPMNDiagram xmlns=""
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" 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" id="Diagram-_1"
name="New Diagram"> name="New Diagram">
<bpmndi:BPMNPlane bpmnElement="myProcess_1"> <bpmndi:BPMNPlane bpmnElement="leave">
<bpmndi:BPMNShape bpmnElement="_2" id="Shape-_2"> <bpmndi:BPMNShape bpmnElement="_14" id="Shape-_14">
<omgdc:Bounds height="32.0" width="32.0" x="560.0" y="110.0"/> <omgdc:Bounds height="32.0" width="32.0" x="540.0" y="135.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="_15" id="Shape-_15">
<omgdc:Bounds height="55.0" width="85.0" x="540.0" y="200.0"/> <omgdc:Bounds height="55.0" width="85.0" x="520.0" y="225.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_16" id="Shape-_16">
<omgdc:Bounds height="55.0" width="85.0" x="525.0" y="325.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:BPMNShape bpmnElement="_4" id="Shape-_4"> <bpmndi:BPMNShape bpmnElement="_4" id="Shape-_4">
<omgdc:Bounds height="55.0" width="85.0" x="540.0" y="295.0"/> <omgdc:Bounds height="32.0" width="32.0" x="435.0" y="505.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_5" id="Shape-_5">
<omgdc:Bounds height="55.0" width="85.0" x="540.0" y="405.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_6" id="Shape-_6">
<omgdc:Bounds height="32.0" width="32.0" x="565.0" y="510.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:BPMNEdge bpmnElement="_7" id="BPMNEdge__7" sourceElement="_2" targetElement="_3"> <bpmndi:BPMNShape bpmnElement="_5" id="Shape-_5">
<omgdi:waypoint x="576.0" y="142.0"/> <omgdc:Bounds height="55.0" width="85.0" x="520.0" y="425.0"/>
<omgdi:waypoint x="576.0" y="200.0"/> <bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="_2" id="BPMNEdge__2" sourceElement="_14" targetElement="_15">
<omgdi:waypoint x="556.0" y="167.0"/>
<omgdi:waypoint x="556.0" y="225.0"/>
<bpmndi:BPMNLabel> <bpmndi:BPMNLabel>
<omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel> </bpmndi:BPMNLabel>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_8" id="BPMNEdge__8" sourceElement="_3" targetElement="_4"> <bpmndi:BPMNEdge bpmnElement="_3" id="BPMNEdge__3" sourceElement="_15" targetElement="_16">
<omgdi:waypoint x="582.5" y="255.0"/> <omgdi:waypoint x="565.0" y="280.0"/>
<omgdi:waypoint x="582.5" y="295.0"/> <omgdi:waypoint x="565.0" y="325.0"/>
<bpmndi:BPMNLabel> <bpmndi:BPMNLabel>
<omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel> </bpmndi:BPMNLabel>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_9" id="BPMNEdge__9" sourceElement="_4" targetElement="_5"> <bpmndi:BPMNEdge bpmnElement="_6" id="BPMNEdge__6" sourceElement="_16" targetElement="_5">
<omgdi:waypoint x="582.5" y="350.0"/> <omgdi:waypoint x="565.0" y="380.0"/>
<omgdi:waypoint x="582.5" y="405.0"/> <omgdi:waypoint x="565.0" y="425.0"/>
<bpmndi:BPMNLabel> <bpmndi:BPMNLabel>
<omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel> </bpmndi:BPMNLabel>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_10" id="BPMNEdge__10" sourceElement="_5" targetElement="_6"> <bpmndi:BPMNEdge bpmnElement="_7" id="BPMNEdge__7" sourceElement="_5" targetElement="_4">
<omgdi:waypoint x="581.0" y="460.0"/> <omgdi:waypoint x="520.0" y="452.5"/>
<omgdi:waypoint x="581.0" y="510.0"/> <omgdi:waypoint x="467.0" y="521.0"/>
<bpmndi:BPMNLabel> <bpmndi:BPMNLabel>
<omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel> </bpmndi:BPMNLabel>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -0,0 +1,118 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
xmlns:activiti="http://activiti.org/bpmn"
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:tns="http://www.activiti.org/test"
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="m1585036839268"
name=""
targetNamespace="http://www.activiti.org/test"
typeLanguage="http://www.w3.org/2001/XMLSchema">
<process xmlns="" id="leavefull" isClosed="false" isExecutable="true" processType="None">
<startEvent id="_2" name="StartEvent"/>
<userTask activiti:assignee="zhangsan" activiti:exclusive="true" id="_3" name="填写申请"/>
<userTask activiti:assignee="lisi" activiti:exclusive="true" id="_4" name="经理审批"/>
<userTask activiti:assignee="wangwu" activiti:exclusive="true" id="_5" name="老板审批"/>
<exclusiveGateway gatewayDirection="Unspecified" id="_6" name="ExclusiveGateway"/>
<sequenceFlow id="_7" sourceRef="_2" targetRef="_3"/>
<sequenceFlow id="_8" sourceRef="_3" targetRef="_6"/>
<sequenceFlow id="_9" sourceRef="_6" targetRef="_4">
<conditionExpression xsi:type="tFormalExpression">${days &lt;= 3}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="_10" sourceRef="_6" targetRef="_5"/>
<endEvent id="_14" name="EndEvent"/>
<sequenceFlow id="_16" sourceRef="_4" targetRef="_14"/>
<sequenceFlow id="_17" sourceRef="_5" targetRef="_14"/>
</process>
<bpmndi:BPMNDiagram xmlns=""
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="leavefull">
<bpmndi:BPMNShape bpmnElement="_2" id="Shape-_2">
<omgdc:Bounds height="32.0" width="32.0" x="450.0" y="10.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_3" id="Shape-_3">
<omgdc:Bounds height="55.0" width="85.0" x="430.0" y="80.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_4" id="Shape-_4">
<omgdc:Bounds height="55.0" width="85.0" x="295.0" y="200.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_5" id="Shape-_5">
<omgdc:Bounds height="55.0" width="85.0" x="535.0" y="195.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_6" id="Shape-_6" isMarkerVisible="false">
<omgdc:Bounds height="32.0" width="32.0" x="450.0" y="150.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_14" id="Shape-_14">
<omgdc:Bounds height="32.0" width="32.0" x="455.0" y="380.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="_17" id="BPMNEdge__17" sourceElement="_5" targetElement="_14">
<omgdi:waypoint x="535.0" y="222.5"/>
<omgdi:waypoint x="487.0" y="396.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_16" id="BPMNEdge__16" sourceElement="_4" targetElement="_14">
<omgdi:waypoint x="380.0" y="227.5"/>
<omgdi:waypoint x="455.0" y="396.0"/>
<bpmndi:BPMNLabel>
<omgdc: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="_2" targetElement="_3">
<omgdi:waypoint x="466.0" y="42.0"/>
<omgdi:waypoint x="466.0" y="80.0"/>
<bpmndi:BPMNLabel>
<omgdc: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="_3" targetElement="_6">
<omgdi:waypoint x="466.0" y="135.0"/>
<omgdi:waypoint x="466.0" y="150.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_9" id="BPMNEdge__9" sourceElement="_6" targetElement="_4">
<omgdi:waypoint x="451.0" y="165.0"/>
<omgdi:waypoint x="335.0" y="165.0"/>
<omgdi:waypoint x="335.0" y="200.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_10" id="BPMNEdge__10" sourceElement="_6" targetElement="_5">
<omgdi:waypoint x="481.0" y="165.0"/>
<omgdi:waypoint x="575.0" y="165.0"/>
<omgdi:waypoint x="575.0" y="195.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>