add 选择标准接口增加标准状态查询条件

This commit is contained in:
liao
2023-11-21 15:56:14 +08:00
parent 4f483c51a1
commit 6227edc9d7
8 changed files with 211 additions and 115 deletions
@@ -0,0 +1,14 @@
package com.jero.modules.activiti.process.fb.common;
/**
* @Author: liao
* @Date: 2023/11/21 15:29
* @Description: 节点排序值
*/
public class ConsultationNodeSort {
public final static Integer MODULE_OWNER_LIST = 3; // 模块负责人
public final static Integer DESIGN_ENGINEER_LIST = 4; // 模块负责人
}
@@ -13,6 +13,8 @@ public class ConsultationTaskKey {
public static final String ENGINEER_START_END = "engineer_start_end"; // 法规工程师汇总
public static final String REJECT = "reject"; // 法规工程师驳回
public static final String DEPART_LEADER_START_1 = "depart_leader_start_1"; // 各部所主管级领导分发
public static final String DEPART_LEADER_START_2 = "depart_leader_start_2"; // 各部所主管级领导分发
@@ -40,29 +40,39 @@ public class TaskListenerService {
LambdaQueryWrapper<ProcessFbConsultationUserLink> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProcessFbConsultationUserLink::getBusinessId, processAll.getProjectId());
String userId = CurrentUserUtil.getId();
ProcessFbConsultationUserLink userLink;
switch (taskDefinitionKey) {
case ConsultationTaskKey.MODULE_OWNER_START: // 模块负责人分发
queryWrapper.eq(ProcessFbConsultationUserLink::getDepartLeaderId, userId);
queryWrapper.eq(ProcessFbConsultationUserLink::getModuleOwnerId, assignee);
userLink = processFbConsultationUserLinkService.getOne(queryWrapper);
delegateTask.setFormKey(userLink.getId());
break;
case ConsultationTaskKey.DESIGN_ENGINEER_2: // 设计工程师填写征求意见(不分发给模块负责人)
queryWrapper.eq(ProcessFbConsultationUserLink::getDepartLeaderId, userId);
queryWrapper.eq(ProcessFbConsultationUserLink::getDesignEngineerId, assignee);
userLink = processFbConsultationUserLinkService.getOne(queryWrapper);
delegateTask.setFormKey(userLink.getId());
break;
case ConsultationTaskKey.DESIGN_ENGINEER_1: // 设计工程师填写征求意见(分发给模块负责人)
userLink = processFbConsultationUserLinkService.getById(assignee);
assignee = userLink.getDesignEngineerId();
delegateTask.setAssignee(userLink.getDesignEngineerId());
delegateTask.setFormKey(userLink.getId());
break;
default:
log.info("{}没有监听任务", taskDefinitionKey);
return;
}
ProcessFbConsultationUserLink userLink = processFbConsultationUserLinkService.getOne(queryWrapper);
delegateTask.setFormKey(userLink.getId());
log.info("================================任务监听器=================================");
log.info("任务id: {}", delegateTask.getId());
log.info("TaskDefinitionKey: {}", delegateTask.getTaskDefinitionKey());
log.info("任务Name: {}", delegateTask.getName());
log.info("taskDefinitionKey: {}", taskDefinitionKey);
log.info("assignee: {}", assignee);
log.info("FormKey: {}", delegateTask.getFormKey());
log.info("任务ExecutionId: {}", execution.getId());
log.info("任务SuperExecutionId: {}", execution.getSuperExecutionId());
log.info("任务ExecutionId: {}", execution.getParentId());
log.info("=======================================================================");
}
@@ -7,6 +7,7 @@ import com.jero.modules.activiti.entity.ProcessNode;
import com.jero.modules.activiti.entity.ProcessNodeLink;
import com.jero.modules.activiti.enums.CommitFlagEnum;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.fb.common.ConsultationNodeSort;
import com.jero.modules.activiti.process.fb.common.ConsultationTaskKey;
import com.jero.modules.activiti.process.fb.common.ProcessDefinitionKey;
import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
@@ -39,6 +40,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -189,11 +191,12 @@ public class ProcessFbStandardConsultationServiceImpl extends ServiceImpl<Proces
log.info("================================流程节点=================================");
log.info("任务Id: {}", task.getId());
log.info("TaskDefinitionKey: {}", task.getTaskDefinitionKey());
log.info("任务Name: {}", task.getName());
log.info("任务FormKey: {}", task.getFormKey());
log.info("任务ProcessInstanceId: {}", task.getProcessInstanceId());
log.info("任务ExecutionId: {}", task.getExecutionId());
log.info("任务SuperExecutionId: {}", execution.getSuperExecutionId());
log.info("任务ParentTaskId: {}", task.getParentTaskId());
log.info("任务ExecutionId: {}", execution.getParentId());
log.info("=======================================================================");
switch (taskDefinitionKey) {
@@ -206,11 +209,59 @@ public class ProcessFbStandardConsultationServiceImpl extends ServiceImpl<Proces
case ConsultationTaskKey.DEPART_LEADER_COLLECT_2: // 各部所主管级领导汇总(不分发给模块负责人)
departLeaderCollect_2(processInfoVO);
break;
case ConsultationTaskKey.MODULE_OWNER_START: // 模块负责人分发
moduleOwnerStart(processInfoVO);
break;
default:
throw new JeroBootException("目前还未开发,请联系管理员");
}
}
/**
* @Author: liao
* @Date: 2023/11/21 15:07
* @Description: 模块负责人分发
**/
private void moduleOwnerStart(ProcessInfoVO<ProcessFbStandardConsultationVO> processInfoVO) {
ProcessFbStandardConsultationVO businessInfoDTO = processInfoVO.getBusinessInfoDTO(); // 全部业务信息
String designEngineerId = businessInfoDTO.getProcessFbConsultationUserLink().getDesignEngineerId();
if (StringUtils.isBlank(designEngineerId)) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "designEngineerId");
}
String taskId = processInfoVO.getBasicTaskInfoDTO().getTaskId();
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
String userLinkId = task.getFormKey();
log.info("userLinkId: {}", userLinkId);
ProcessFbConsultationUserLink processFbConsultationUserLink = processFbConsultationUserLinkService.getById(userLinkId);
List<String> designEngineerIdList = Arrays.asList(designEngineerId.split(","));
List<ProcessFbConsultationUserLink> userLinkList = new ArrayList<>();
designEngineerIdList.forEach(designEngineer -> {
ProcessFbConsultationUserLink userLink = new ProcessFbConsultationUserLink();
userLink.setUserType(processFbConsultationUserLink.getUserType());
userLink.setBusinessId(processFbConsultationUserLink.getBusinessId());
userLink.setDepartLeaderId(processFbConsultationUserLink.getDepartLeaderId());
userLink.setModuleOwnerId(processFbConsultationUserLink.getModuleOwnerId());
userLink.setDesignEngineerId(designEngineer);
userLinkList.add(userLink);
});
processFbConsultationUserLinkService.removeById(userLinkId); // 先删除
processFbConsultationUserLinkService.saveBatch(userLinkList, userLinkList.size()); // 后新增
List<String> idList = userLinkList.stream().map(ProcessFbConsultationUserLink::getId).collect(Collectors.toList());
String processInstanceId = task.getProcessInstanceId();
runtimeService.setVariableLocal(processInstanceId, "designEngineerList", idList);
saveNodeUserLink(processInstanceId, ConsultationNodeSort.DESIGN_ENGINEER_LIST, designEngineerIdList);
// 完成任务
taskService.complete(taskId);
}
/**
* @Author: liao
* @Date: 2023/11/21 9:39
@@ -222,7 +273,9 @@ public class ProcessFbStandardConsultationServiceImpl extends ServiceImpl<Proces
String taskId = processInfoVO.getBasicTaskInfoDTO().getTaskId();
processFbConsultationListService.updateBatchById(processFbConsultationLists); // 更新业务信息
if (CollectionUtils.isNotEmpty(processFbConsultationLists)) {
processFbConsultationListService.updateBatchById(processFbConsultationLists); // 更新业务信息
}
// 完成任务
taskService.complete(taskId);
@@ -285,6 +338,7 @@ public class ProcessFbStandardConsultationServiceImpl extends ServiceImpl<Proces
List<String> moduleOwnerIds = Arrays.asList(userLink.getModuleOwnerId().split(","));
moduleOwnerIds.forEach(moduleOwnerId -> {
ProcessFbConsultationUserLink link = new ProcessFbConsultationUserLink();
link.setUserType("1");
link.setBusinessId(processInfoVO.getBusinessId());
link.setDepartLeaderId(CurrentUserUtil.getId());
link.setModuleOwnerId(moduleOwnerId);
@@ -293,7 +347,7 @@ public class ProcessFbStandardConsultationServiceImpl extends ServiceImpl<Proces
processFbConsultationUserLinkService.saveBatch(linkList, linkList.size());
variables.put("passFirst", true);
variables.put("moduleOwnerList", moduleOwnerIds);
saveNodeUserLink(processInstanceId, 3, moduleOwnerIds);
saveNodeUserLink(processInstanceId, ConsultationNodeSort.MODULE_OWNER_LIST, moduleOwnerIds);
} else { // 设计工程师
if (StringUtils.isBlank(userLink.getDesignEngineerId())) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "designEngineerId");
@@ -301,6 +355,7 @@ public class ProcessFbStandardConsultationServiceImpl extends ServiceImpl<Proces
List<String> designEngineerIds = Arrays.asList(userLink.getDesignEngineerId().split(","));
designEngineerIds.forEach(designEngineerId -> {
ProcessFbConsultationUserLink link = new ProcessFbConsultationUserLink();
link.setUserType("2");
link.setBusinessId(processInfoVO.getBusinessId());
link.setDepartLeaderId(CurrentUserUtil.getId());
link.setDesignEngineerId(designEngineerId);
@@ -309,7 +364,7 @@ public class ProcessFbStandardConsultationServiceImpl extends ServiceImpl<Proces
processFbConsultationUserLinkService.saveBatch(linkList, linkList.size());
variables.put("passFirst", false);
variables.put("designEngineerList", designEngineerIds);
saveNodeUserLink(processInstanceId, 4, designEngineerIds);
saveNodeUserLink(processInstanceId, ConsultationNodeSort.DESIGN_ENGINEER_LIST, designEngineerIds);
}
runtimeService.setVariablesLocal(processInstanceId, variables);
@@ -100,9 +100,11 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
log.info("================================启动流程=================================");
log.info("流程定义id: {}", processDefinitionId);
log.info("流程实例id: {}", processInstanceId);
log.info("任务Id: {}", task.getId());
log.info("TaskDefinitionKey: {}", task.getTaskDefinitionKey());
log.info("任务Name: {}", task.getName());
log.info("任务ExecutionId: {}", task.getExecutionId());
log.info("任务SuperExecutionId: {}", execution.getSuperExecutionId());
log.info("任务ParentTaskId: {}", task.getParentTaskId());
log.info("任务ExecutionId: {}", execution.getParentId());
log.info("=======================================================================");
// 完成任务
@@ -79,6 +79,9 @@
<if test="vo.source != null and vo.source != ''">
AND #{vo.source} LIKE CONCAT('%', standard.source, '%')
</if>
<if test="vo.standardState != null and vo.standardState != ''">
AND #{vo.standardState} LIKE CONCAT('%', standard.standard_state, '%')
</if>
<if test="vo.standardNumberOrName != null and vo.standardNumberOrName != ''">
AND (standard_number LIKE CONCAT('%', #{vo.standardNumberOrName}, '%') OR
standard_name LIKE CONCAT('%', #{vo.standardNumberOrName}, '%'))
@@ -28,4 +28,7 @@ public class ManyStandardSelectionBoxVO {
@ApiModelProperty(value = "发布状态的拆分稿-标识")
private String releaseSplitFlag;
@ApiModelProperty(value = "标准状态")
private java.lang.String standardState;
}
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:bpmn="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: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" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<bpmn:process id="fb-standard-consultation" name="标准征求意见流程" isExecutable="true">
<bpmn:process id="fb-standard-consultation" name="标准征求意见流程" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_1d5objw</bpmn:outgoing>
</bpmn:startEvent>
@@ -144,15 +144,12 @@
<activiti:taskListener class="com.jero.modules.activiti.process.fb.listener.BusinessKeyListener" event="create" />
</bpmn:extensionElements>
<bpmn:incoming>Flow_19vxot3</bpmn:incoming>
<bpmn:incoming>Flow_0g6wwzz</bpmn:incoming>
<bpmn:incoming>Flow_1f5fu60</bpmn:incoming>
<bpmn:outgoing>Flow_1125yee</bpmn:outgoing>
</bpmn:userTask>
<bpmn:sequenceFlow id="Flow_19vxot3" sourceRef="sub_process_1" targetRef="engineer_start_end" />
<bpmn:exclusiveGateway id="Gateway_0pd0196">
<bpmn:incoming>Flow_1125yee</bpmn:incoming>
<bpmn:outgoing>Flow_0sb0q1z</bpmn:outgoing>
<bpmn:outgoing>Flow_1aeqdsv</bpmn:outgoing>
<bpmn:outgoing>Flow_0jjkrst</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:sequenceFlow id="Flow_1125yee" sourceRef="engineer_start_end" targetRef="Gateway_0pd0196" />
@@ -160,25 +157,10 @@
<bpmn:incoming>Flow_0sb0q1z</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_0sb0q1z" name="通过" sourceRef="Gateway_0pd0196" targetRef="Event_07yr7ob">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${passThird == 1}</bpmn:conditionExpression>
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${passThird}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_1aeqdsv" name="驳回" sourceRef="Gateway_0pd0196" targetRef="depart_leader_collect_3">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${passThird == 2}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:userTask id="depart_leader_collect_3" name="各部所主管级领导汇总">
<bpmn:extensionElements>
<activiti:taskListener class="com.jero.modules.activiti.process.fb.listener.BusinessKeyListener" event="create" />
</bpmn:extensionElements>
<bpmn:incoming>Flow_1aeqdsv</bpmn:incoming>
<bpmn:outgoing>Flow_0g6wwzz</bpmn:outgoing>
<bpmn:multiInstanceLoopCharacteristics activiti:collection="departLeaderList" activiti:elementVariable="departLeader">
<bpmn:completionCondition xsi:type="bpmn:tFormalExpression">${nrOfInstances== nrOfCompletedInstances}</bpmn:completionCondition>
</bpmn:multiInstanceLoopCharacteristics>
</bpmn:userTask>
<bpmn:sequenceFlow id="Flow_0g6wwzz" sourceRef="depart_leader_collect_3" targetRef="engineer_start_end" />
<bpmn:subProcess id="sub_process_3">
<bpmn:incoming>Flow_0jjkrst</bpmn:incoming>
<bpmn:outgoing>Flow_1f5fu60</bpmn:outgoing>
<bpmn:multiInstanceLoopCharacteristics activiti:collection="departLeaderList" activiti:elementVariable="departLeader">
<bpmn:completionCondition xsi:type="bpmn:tFormalExpression">${nrOfInstances== nrOfCompletedInstances}</bpmn:completionCondition>
</bpmn:multiInstanceLoopCharacteristics>
@@ -190,7 +172,7 @@
<activiti:taskListener class="com.jero.modules.activiti.process.fb.listener.BusinessKeyListener" event="create" />
</bpmn:extensionElements>
<bpmn:incoming>Flow_1ft2poj</bpmn:incoming>
<bpmn:incoming>Flow_0q5ae61</bpmn:incoming>
<bpmn:incoming>Flow_1vn8jk5</bpmn:incoming>
<bpmn:outgoing>Flow_0mdmcs5</bpmn:outgoing>
<bpmn:multiInstanceLoopCharacteristics activiti:collection="moduleOwnerList" activiti:elementVariable="moduleOwner">
<bpmn:completionCondition xsi:type="bpmn:tFormalExpression">${nrOfInstances== nrOfCompletedInstances}</bpmn:completionCondition>
@@ -212,6 +194,7 @@
<bpmn:sequenceFlow id="Flow_0flbibd" sourceRef="depart_leader_end_4" targetRef="Gateway_1pq4fen" />
<bpmn:endEvent id="Event_07vxc54">
<bpmn:incoming>Flow_1ta4894</bpmn:incoming>
<bpmn:incoming>Flow_132k5wt</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_1ta4894" name="通过" sourceRef="Gateway_1pq4fen" targetRef="Event_07vxc54">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${passSecond}</bpmn:conditionExpression>
@@ -219,20 +202,38 @@
<bpmn:sequenceFlow id="Flow_1ft2poj" name="驳回" sourceRef="Gateway_1pq4fen" targetRef="module_owner_end_3">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${!passSecond}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:userTask id="depart_leader_start_2" name="各部所主管级领导审批" activiti:assignee="${departLeader}">
<bpmn:userTask id="reject" name="法规工程师驳回" activiti:assignee="${departLeader}">
<bpmn:extensionElements>
<activiti:taskListener class="com.jero.modules.activiti.process.fb.listener.BusinessKeyListener" event="create" />
</bpmn:extensionElements>
<bpmn:incoming>Flow_07p5ivp</bpmn:incoming>
<bpmn:outgoing>Flow_0q5ae61</bpmn:outgoing>
<bpmn:outgoing>Flow_1ybap2u</bpmn:outgoing>
</bpmn:userTask>
<bpmn:sequenceFlow id="Flow_07p5ivp" sourceRef="Event_0eapre1" targetRef="depart_leader_start_2" />
<bpmn:sequenceFlow id="Flow_0q5ae61" sourceRef="depart_leader_start_2" targetRef="module_owner_end_3" />
<bpmn:sequenceFlow id="Flow_07p5ivp" sourceRef="Event_0eapre1" targetRef="reject" />
<bpmn:exclusiveGateway id="Gateway_0vnihbs">
<bpmn:incoming>Flow_1ybap2u</bpmn:incoming>
<bpmn:outgoing>Flow_1vn8jk5</bpmn:outgoing>
<bpmn:outgoing>Flow_1tg5cq9</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:sequenceFlow id="Flow_1ybap2u" sourceRef="reject" targetRef="Gateway_0vnihbs" />
<bpmn:sequenceFlow id="Flow_1vn8jk5" name="分发" sourceRef="Gateway_0vnihbs" targetRef="module_owner_end_3">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${passFourth}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:userTask id="depart_leader_collect_3" name="各部所主管级领导汇总" activiti:assignee="${departLeader}">
<bpmn:extensionElements>
<activiti:taskListener class="com.jero.modules.activiti.process.fb.listener.BusinessKeyListener" event="create" />
</bpmn:extensionElements>
<bpmn:incoming>Flow_1tg5cq9</bpmn:incoming>
<bpmn:outgoing>Flow_132k5wt</bpmn:outgoing>
</bpmn:userTask>
<bpmn:sequenceFlow id="Flow_1tg5cq9" name="不分发" sourceRef="Gateway_0vnihbs" targetRef="depart_leader_collect_3">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${!passFourth}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_132k5wt" sourceRef="depart_leader_collect_3" targetRef="Event_07vxc54" />
</bpmn:subProcess>
<bpmn:sequenceFlow id="Flow_0jjkrst" name="驳回" sourceRef="Gateway_0pd0196" targetRef="sub_process_3">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${passThird == 3}</bpmn:conditionExpression>
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${!passThird}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_1f5fu60" sourceRef="sub_process_3" targetRef="engineer_start_end" />
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="fb-standard-consultation">
@@ -243,6 +244,12 @@
<dc:Bounds x="160" y="360" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0pd0196_di" bpmnElement="Gateway_0pd0196" isMarkerVisible="true">
<dc:Bounds x="1715" y="375" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_07yr7ob_di" bpmnElement="Event_07yr7ob">
<dc:Bounds x="1822" y="382" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0mj9ddw_di" bpmnElement="sub_process_1" isExpanded="true">
<dc:Bounds x="320" y="40" width="1120" height="690" />
</bpmndi:BPMNShape>
@@ -267,6 +274,10 @@
<dc:Bounds x="890" y="420" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_18s4mik" bpmnElement="module_owner_end_2">
<dc:Bounds x="1060" y="340" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1pip97n_di" bpmnElement="sub_process_2" isExpanded="true">
<dc:Bounds x="680" y="100" width="660" height="210" />
</bpmndi:BPMNShape>
@@ -314,10 +325,6 @@
<dc:Bounds x="730" y="530" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_18s4mik" bpmnElement="module_owner_end_2">
<dc:Bounds x="1090" y="340" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1gv6jmb_di" bpmnElement="Flow_1gv6jmb">
<di:waypoint x="378" y="400" />
<di:waypoint x="430" y="400" />
@@ -346,8 +353,8 @@
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0oc8671_di" bpmnElement="Flow_0oc8671">
<di:waypoint x="940" y="310" />
<di:waypoint x="940" y="420" />
<di:waypoint x="920" y="310" />
<di:waypoint x="920" y="420" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_18olfei_di" bpmnElement="Flow_18olfei">
<di:waypoint x="990" y="460" />
@@ -363,7 +370,7 @@
<bpmndi:BPMNEdge id="Flow_0f48izh_di" bpmnElement="Flow_0f48izh">
<di:waypoint x="1270" y="435" />
<di:waypoint x="1270" y="380" />
<di:waypoint x="1190" y="380" />
<di:waypoint x="1160" y="380" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1276" y="401" width="22" height="14" />
</bpmndi:BPMNLabel>
@@ -373,79 +380,96 @@
<di:waypoint x="1252" y="570" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_14aeapm_di" bpmnElement="Flow_14aeapm">
<di:waypoint x="1090" y="379" />
<di:waypoint x="940" y="379" />
<di:waypoint x="940" y="420" />
<di:waypoint x="1060" y="379" />
<di:waypoint x="960" y="379" />
<di:waypoint x="960" y="420" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Activity_1th4kyn_di" bpmnElement="engineer_start_end">
<dc:Bounds x="1560" y="360" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0pd0196_di" bpmnElement="Gateway_0pd0196" isMarkerVisible="true">
<dc:Bounds x="1585" y="495" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_07yr7ob_di" bpmnElement="Event_07yr7ob">
<dc:Bounds x="1492" y="502" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0k4hx5w" bpmnElement="depart_leader_collect_3">
<dc:Bounds x="1780" y="480" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0qqp5sb_di" bpmnElement="sub_process_3" isExpanded="true">
<dc:Bounds x="1492" y="600" width="678" height="250" />
<dc:Bounds x="1490" y="480" width="838" height="310" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0eapre1_di" bpmnElement="Event_0eapre1">
<dc:Bounds x="1512" y="702" width="36" height="36" />
<dc:Bounds x="1510" y="582" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_19cqaly" bpmnElement="reject">
<dc:Bounds x="1578" y="560" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_07vxc54_di" bpmnElement="Event_07vxc54">
<dc:Bounds x="2260" y="582" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_1pq4fen_di" bpmnElement="Gateway_1pq4fen" isMarkerVisible="true">
<dc:Bounds x="2163" y="575" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0vnihbs_di" bpmnElement="Gateway_0vnihbs" isMarkerVisible="true">
<dc:Bounds x="1723" y="575" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_00so089" bpmnElement="module_owner_end_3">
<dc:Bounds x="1720" y="680" width="100" height="80" />
<dc:Bounds x="1828" y="560" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_035drax" bpmnElement="depart_leader_end_4">
<dc:Bounds x="1860" y="680" width="100" height="80" />
<dc:Bounds x="1998" y="560" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_1pq4fen_di" bpmnElement="Gateway_1pq4fen" isMarkerVisible="true">
<dc:Bounds x="1995" y="695" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_07vxc54_di" bpmnElement="Event_07vxc54">
<dc:Bounds x="2092" y="702" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_19cqaly" bpmnElement="depart_leader_start_2">
<dc:Bounds x="1580" y="680" width="100" height="80" />
<bpmndi:BPMNShape id="BPMNShape_0k4hx5w" bpmnElement="depart_leader_collect_3">
<dc:Bounds x="1828" y="660" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0mdmcs5_di" bpmnElement="Flow_0mdmcs5">
<di:waypoint x="1820" y="720" />
<di:waypoint x="1860" y="720" />
<bpmndi:BPMNEdge id="Flow_07p5ivp_di" bpmnElement="Flow_07p5ivp">
<di:waypoint x="1546" y="600" />
<di:waypoint x="1578" y="600" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0flbibd_di" bpmnElement="Flow_0flbibd">
<di:waypoint x="1960" y="720" />
<di:waypoint x="1995" y="720" />
<bpmndi:BPMNEdge id="Flow_1ybap2u_di" bpmnElement="Flow_1ybap2u">
<di:waypoint x="1678" y="600" />
<di:waypoint x="1723" y="600" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1ta4894_di" bpmnElement="Flow_1ta4894">
<di:waypoint x="2045" y="720" />
<di:waypoint x="2092" y="720" />
<di:waypoint x="2213" y="600" />
<di:waypoint x="2260" y="600" />
<bpmndi:BPMNLabel>
<dc:Bounds x="2058" y="702" width="22" height="14" />
<dc:Bounds x="2222" y="582" width="23" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0flbibd_di" bpmnElement="Flow_0flbibd">
<di:waypoint x="2098" y="600" />
<di:waypoint x="2163" y="600" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1ft2poj_di" bpmnElement="Flow_1ft2poj">
<di:waypoint x="2020" y="695" />
<di:waypoint x="2020" y="630" />
<di:waypoint x="1770" y="630" />
<di:waypoint x="1770" y="680" />
<di:waypoint x="2188" y="575" />
<di:waypoint x="2188" y="510" />
<di:waypoint x="1878" y="510" />
<di:waypoint x="1878" y="560" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1886" y="612" width="21" height="14" />
<dc:Bounds x="2024" y="492" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_07p5ivp_di" bpmnElement="Flow_07p5ivp">
<di:waypoint x="1548" y="720" />
<di:waypoint x="1580" y="720" />
<bpmndi:BPMNEdge id="Flow_1vn8jk5_di" bpmnElement="Flow_1vn8jk5">
<di:waypoint x="1773" y="600" />
<di:waypoint x="1828" y="600" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1790" y="582" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0q5ae61_di" bpmnElement="Flow_0q5ae61">
<di:waypoint x="1680" y="720" />
<di:waypoint x="1720" y="720" />
<bpmndi:BPMNEdge id="Flow_1tg5cq9_di" bpmnElement="Flow_1tg5cq9">
<di:waypoint x="1748" y="625" />
<di:waypoint x="1748" y="700" />
<di:waypoint x="1828" y="700" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1761" y="660" width="33" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0mdmcs5_di" bpmnElement="Flow_0mdmcs5">
<di:waypoint x="1928" y="600" />
<di:waypoint x="1998" y="600" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_132k5wt_di" bpmnElement="Flow_132k5wt">
<di:waypoint x="1928" y="700" />
<di:waypoint x="2278" y="700" />
<di:waypoint x="2278" y="618" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1d5objw_di" bpmnElement="Flow_1d5objw">
<di:waypoint x="210" y="318" />
@@ -460,40 +484,23 @@
<di:waypoint x="1560" y="400" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1125yee_di" bpmnElement="Flow_1125yee">
<di:waypoint x="1610" y="440" />
<di:waypoint x="1610" y="495" />
<di:waypoint x="1660" y="400" />
<di:waypoint x="1715" y="400" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0sb0q1z_di" bpmnElement="Flow_0sb0q1z">
<di:waypoint x="1585" y="520" />
<di:waypoint x="1528" y="520" />
<di:waypoint x="1765" y="400" />
<di:waypoint x="1822" y="400" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1542" y="496" width="22" height="14" />
<dc:Bounds x="1772" y="378" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1aeqdsv_di" bpmnElement="Flow_1aeqdsv">
<di:waypoint x="1635" y="520" />
<di:waypoint x="1780" y="520" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1697" y="502" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0g6wwzz_di" bpmnElement="Flow_0g6wwzz">
<di:waypoint x="1830" y="480" />
<di:waypoint x="1830" y="400" />
<di:waypoint x="1660" y="400" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0jjkrst_di" bpmnElement="Flow_0jjkrst">
<di:waypoint x="1610" y="545" />
<di:waypoint x="1610" y="600" />
<di:waypoint x="1740" y="425" />
<di:waypoint x="1740" y="480" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1616" y="569" width="21" height="14" />
<dc:Bounds x="1747" y="449" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1f5fu60_di" bpmnElement="Flow_1f5fu60">
<di:waypoint x="2030" y="600" />
<di:waypoint x="2030" y="400" />
<di:waypoint x="1660" y="400" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>