feat(REQ-4418) - 调整协助转换逻辑

This commit is contained in:
wangli 2025-08-25 15:36:34 +08:00
parent 7e0999d29a
commit aa7f8cb854
6 changed files with 53 additions and 122 deletions

View File

@ -846,7 +846,7 @@ public final class BpmnJsonConverterUtil {
getSignConfig(bpmnModel.getMainProcess());
BpmnJsonModel bpmnJsonModel = convertToJson(bpmnModel);
FlowElement flowElement = bpmnModel.getFlowElement("node_865016003134_707l");
FlowElement flowElement = bpmnModel.getFlowElement("node_865038288523_ff8k");
Optional<InitiatorSpecifiedRangeEnum> initiatorSpecifyRange = getInitiatorSpecifyRange(flowElement);
Optional<Boolean> initiatorSpecifiedFilter = getInitiatorSpecifiedFilter(flowElement);
Optional<List<String>> excludeIdentityTypes = getExcludeIdentityTypes(flowElement);

View File

@ -143,7 +143,7 @@ public final class BpmnMetaParserHelper {
}
public static Optional<Integer> getCategoryVersion(Process process) {
if(Objects.isNull(process)) {
if (Objects.isNull(process)) {
return Optional.of(0);
}
String categoryVersion = process.getAttributeValue(null, FLOW_CATEGORY_VERSION);
@ -471,11 +471,11 @@ public final class BpmnMetaParserHelper {
}
public static Optional<ApproverSpecifyEnum> getApproverSpecify(FlowElement flowElement) {
if (Objects.nonNull(flowElement) ){
if(flowElement instanceof UserTask) {
if (Objects.nonNull(flowElement)) {
if (flowElement instanceof UserTask) {
return getApproverSpecify((UserTask) flowElement);
} else if(flowElement instanceof ServiceTask) {
} else if (flowElement instanceof ServiceTask) {
return getApproverSpecify((ServiceTask) flowElement);
}
}
@ -486,24 +486,14 @@ public final class BpmnMetaParserHelper {
return defaultValid(userTask, CONFIG_APPROVER_SPECIFY).map(element -> ApproverSpecifyEnum.valueOf(element.getAttributeValue(null, ELEMENT_ATTRIBUTE_VALUE)));
}
public static Optional<ApproverSpecifyEnum> getApproverSpecify(ServiceTask serviceTask) {
public static Optional<ApproverSpecifyEnum> getApproverSpecify(ServiceTask serviceTask) {
return defaultValid(serviceTask, CONFIG_APPROVER_SPECIFY).map(element -> ApproverSpecifyEnum.valueOf(element.getAttributeValue(null, ELEMENT_ATTRIBUTE_VALUE)));
}
public static Optional<ApproverSpecifyRangeEnum> getApproverSpecifyRange(FlowElement flowElement) {
if (Objects.nonNull(flowElement) && flowElement instanceof UserTask) {
return getApproverSpecifyRange((UserTask) flowElement);
}
return Optional.empty();
}
public static Optional<ApproverSpecifyRangeEnum> getApproverSpecifyRange(UserTask userTask) {
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(userTask);
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(flowElement);
if (approverSpecify.isPresent()) {
return defaultValid(userTask, CONFIG_APPROVER_SPECIFY).map(element -> ApproverSpecifyRangeEnum.valueOf(element.getChildElements()
return defaultValid(flowElement, CONFIG_APPROVER_SPECIFY).map(element -> ApproverSpecifyRangeEnum.valueOf(element.getChildElements()
.getOrDefault(CONFIG_APPROVE_SPECIFY_RANGE, Collections.emptyList())
.get(0).getAttributeValue(null, ELEMENT_ATTRIBUTE_VALUE)));
}
@ -511,16 +501,9 @@ public final class BpmnMetaParserHelper {
}
public static Optional<SignApproverOrgLimitEnum> getApproverSpecifyRangeOrgLimit(FlowElement flowElement) {
if (Objects.nonNull(flowElement) && flowElement instanceof UserTask) {
return getApproverSpecifyRangeOrgLimit((UserTask) flowElement);
}
return Optional.empty();
}
public static Optional<SignApproverOrgLimitEnum> getApproverSpecifyRangeOrgLimit(UserTask userTask) {
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(userTask);
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(flowElement);
if (approverSpecify.isPresent()) {
return defaultValid(userTask, CONFIG_APPROVER_SPECIFY).flatMap(element -> element.getChildElements()
return defaultValid(flowElement, CONFIG_APPROVER_SPECIFY).flatMap(element -> element.getChildElements()
.getOrDefault(CONFIG_APPROVE_SPECIFY_RANGE_ORG_LIMIT, Collections.emptyList())
.stream()
.findFirst()
@ -530,16 +513,9 @@ public final class BpmnMetaParserHelper {
}
public static Optional<CooperateShipTypeEnum> getCooperateShipType(FlowElement flowElement) {
if (Objects.nonNull(flowElement) && flowElement instanceof UserTask) {
return getCooperateShipType((UserTask) flowElement);
}
return Optional.empty();
}
public static Optional<CooperateShipTypeEnum> getCooperateShipType(UserTask userTask) {
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(userTask);
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(flowElement);
if (approverSpecify.isPresent()) {
return defaultValid(userTask, CONFIG_APPROVER_SPECIFY).flatMap(element -> element.getChildElements()
return defaultValid(flowElement, CONFIG_APPROVER_SPECIFY).flatMap(element -> element.getChildElements()
.getOrDefault(CONFIG_APPROVE_SPECIFY_COOPERATE_TYPE, Collections.emptyList())
.stream()
.findFirst()
@ -549,16 +525,9 @@ public final class BpmnMetaParserHelper {
}
public static Optional<ApproverSpecifyRangeUnitEnum> getApproverSpecifyRangeUnit(FlowElement flowElement) {
if (Objects.nonNull(flowElement) && flowElement instanceof UserTask) {
return getApproverSpecifyRangeUnit((UserTask) flowElement);
}
return Optional.empty();
}
public static Optional<ApproverSpecifyRangeUnitEnum> getApproverSpecifyRangeUnit(UserTask userTask) {
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(userTask);
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(flowElement);
if (approverSpecify.isPresent()) {
return defaultValid(userTask, CONFIG_APPROVER_SPECIFY).flatMap(element -> element.getChildElements()
return defaultValid(flowElement, CONFIG_APPROVER_SPECIFY).flatMap(element -> element.getChildElements()
.getOrDefault(CONFIG_APPROVE_SPECIFY_RANGE_UNIT, Collections.emptyList())
.stream()
.findFirst()
@ -568,16 +537,9 @@ public final class BpmnMetaParserHelper {
}
public static Optional<InitiatorSpecifiedRangeEnum> getInitiatorSpecifyRange(FlowElement flowElement) {
if (Objects.nonNull(flowElement) && flowElement instanceof UserTask) {
return getInitiatorSpecifyRange((UserTask) flowElement);
}
return Optional.empty();
}
public static Optional<InitiatorSpecifiedRangeEnum> getInitiatorSpecifyRange(UserTask userTask) {
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(userTask);
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(flowElement);
if (approverSpecify.isPresent() && Objects.equals(approverSpecify.get(), ApproverSpecifyEnum.initiatorSpecified_v2)) {
return defaultValid(userTask, CONFIG_APPROVER_SPECIFY).flatMap(element -> element.getChildElements()
return defaultValid(flowElement, CONFIG_APPROVER_SPECIFY).flatMap(element -> element.getChildElements()
.getOrDefault(CONFIG_INITIATOR_SPECIFIED_RANGE, Collections.emptyList())
.stream()
.findFirst()
@ -587,16 +549,9 @@ public final class BpmnMetaParserHelper {
}
public static Optional<Boolean> getInitiatorSpecifiedFilter(FlowElement flowElement) {
if (Objects.nonNull(flowElement) && flowElement instanceof UserTask) {
return getInitiatorSpecifiedFilter(((UserTask) flowElement));
}
return Optional.empty();
}
public static Optional<Boolean> getInitiatorSpecifiedFilter(UserTask userTask) {
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(userTask);
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(flowElement);
if (approverSpecify.isPresent() && Objects.equals(approverSpecify.get(), ApproverSpecifyEnum.initiatorSpecified_v2)) {
return defaultValid(userTask, CONFIG_APPROVER_SPECIFY).flatMap(element -> element.getChildElements()
return defaultValid(flowElement, CONFIG_APPROVER_SPECIFY).flatMap(element -> element.getChildElements()
.getOrDefault(CONFIG_INITIATOR_SPECIFIED_FILTER, Collections.emptyList())
.stream()
.findFirst()
@ -606,16 +561,9 @@ public final class BpmnMetaParserHelper {
}
public static Optional<List<String>> getExcludeIdentityTypes(FlowElement flowElement) {
if (Objects.nonNull(flowElement) && flowElement instanceof UserTask) {
return getExcludeIdentityTypes((UserTask) flowElement);
}
return Optional.empty();
}
public static Optional<List<String>> getExcludeIdentityTypes(UserTask userTask) {
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(userTask);
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(flowElement);
if (approverSpecify.isPresent() && Objects.equals(approverSpecify.get(), ApproverSpecifyEnum.initiatorSpecified_v2)) {
return defaultValid(userTask, CONFIG_APPROVER_SPECIFY).flatMap(element -> element.getChildElements()
return defaultValid(flowElement, CONFIG_APPROVER_SPECIFY).flatMap(element -> element.getChildElements()
.getOrDefault(CONFIG_INITIATOR_SPECIFIED_EXCLUDE_IDENTITY_TYPES, Collections.emptyList())
.stream()
.findFirst()
@ -625,16 +573,9 @@ public final class BpmnMetaParserHelper {
}
public static Optional<List<String>> getExcludeCooperateShipTypes(FlowElement flowElement) {
if (Objects.nonNull(flowElement) && flowElement instanceof UserTask) {
return getExcludeIdentityTypes((UserTask) flowElement);
}
return Optional.empty();
}
public static Optional<List<String>> getExcludeCooperateShipTypes(UserTask userTask) {
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(userTask);
Optional<ApproverSpecifyEnum> approverSpecify = getApproverSpecify(flowElement);
if (approverSpecify.isPresent() && Objects.equals(approverSpecify.get(), ApproverSpecifyEnum.initiatorSpecified_v2)) {
return defaultValid(userTask, CONFIG_APPROVER_SPECIFY).flatMap(element -> element.getChildElements()
return defaultValid(flowElement, CONFIG_APPROVER_SPECIFY).flatMap(element -> element.getChildElements()
.getOrDefault(CONFIG_INITIATOR_SPECIFIED_EXCLUDE_COOPERATE_TYPES, Collections.emptyList())
.stream()
.findFirst()
@ -656,14 +597,7 @@ public final class BpmnMetaParserHelper {
}
public static Optional<String> getApproverSpecifyValueV2(FlowElement flowElement) {
if (Objects.nonNull(flowElement) && flowElement instanceof UserTask) {
return getApproverSpecifyValueV2((UserTask) flowElement);
}
return Optional.empty();
}
public static Optional<String> getApproverSpecifyValueV2(UserTask userTask) {
return defaultValid(userTask, CONFIG_APPROVER_SPECIFY).map(element -> element.getChildElements().getOrDefault(TEMPLATE_UPGRADE_APPROVAL_SPECIFY_VALUE, Collections.emptyList()).get(0).getElementText());
return defaultValid(flowElement, CONFIG_APPROVER_SPECIFY).map(element -> element.getChildElements().getOrDefault(TEMPLATE_UPGRADE_APPROVAL_SPECIFY_VALUE, Collections.emptyList()).get(0).getElementText());
}
public static Optional<ApproverEmptyHandleTypeEnum> getApproverEmptyHandleType(FlowElement flowElement) {
@ -693,11 +627,11 @@ public final class BpmnMetaParserHelper {
&& Objects.equals(specifyEnum, ApproverSpecifyEnum.initiatorSpecified);
}
public static Boolean getAreaFilterEnable(FlowElement flowElement){
public static Boolean getAreaFilterEnable(FlowElement flowElement) {
return defaultValid(flowElement, CONFIG_AREA_FILTER_ENABLE).map(element -> Boolean.valueOf(element.getAttributeValue(null, ELEMENT_ATTRIBUTE_CHECKED))).orElse(false);
}
public static Boolean getSpecialtyFilterEnable(FlowElement flowElement){
public static Boolean getSpecialtyFilterEnable(FlowElement flowElement) {
return defaultValid(flowElement, CONFIG_SPECIALTY_FILTER_ENABLE).map(element -> Boolean.valueOf(element.getAttributeValue(null, ELEMENT_ATTRIBUTE_CHECKED))).orElse(false);
}

View File

@ -17,7 +17,6 @@ import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component;
@ -124,7 +123,7 @@ public class BasedIdentityV2TaskAssigneeSelector extends AbstractBpmnTaskAssigne
}
public Set<FlowTaskAssignerIdentityEnum> getApproverSpecifyValue(FlowElement flowElement) {
return getApproverSpecifyValueV2((UserTask) flowElement)
return getApproverSpecifyValueV2(flowElement)
.map(value -> JSON.parseArray(value, String.class).stream().map(JSON::parseObject)
.map(i -> i.getString("value"))
.map(FlowTaskAssignerIdentityEnum::valueOf)

View File

@ -18,7 +18,6 @@ import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component;
@ -147,7 +146,7 @@ public class BasedPositionV2TaskAssigneeSelector extends AbstractBpmnTaskAssigne
}
public Set<String> getApproverSpecifyValue(FlowElement flowElement) {
return getApproverSpecifyValueV2((UserTask) flowElement)
return getApproverSpecifyValueV2(flowElement)
.map(value -> JSON.parseArray(value, String.class).stream().map(JSON::parseObject)
.map(i -> i.getString("value"))
.collect(Collectors.toSet()))

View File

@ -18,7 +18,6 @@ import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component;
@ -146,7 +145,7 @@ public class BasedRoleV2TaskAssigneeSelector extends AbstractBpmnTaskAssigneeSel
}
public Set<Long> getApproverSpecifyValue(FlowElement flowElement) {
return getApproverSpecifyValueV2((UserTask) flowElement)
return getApproverSpecifyValueV2(flowElement)
.map(value -> JSON.parseArray(value, String.class).stream().map(JSON::parseObject)
.map(i -> i.getString("value"))
.map(Long::valueOf)

View File

@ -89,7 +89,7 @@
<jsonValue><![CDATA[{"id":"NODE_STARTER","type":"NODE_STARTER","name":"发起人","property":{"isMultiTask":true,"isSequential":false,"groupsType":"or","fieldPermission":[]}}]]></jsonValue>
</extensionElements>
</userTask>
<sequenceFlow id="SequenceFlowId_65659954c3054d05bd8d95f8a11cd3b1" name="发起人" sourceRef="startEventNode"
<sequenceFlow id="SequenceFlowId_ebf6747caaa541cf889d61c08f25dd92" name="发起人" sourceRef="startEventNode"
targetRef="NODE_STARTER"></sequenceFlow>
<userTask id="node_864990574287_ylc5" name="审批节点" flowable:assignee="${assigneeName}"
flowable:formKey="test-form">
@ -181,7 +181,7 @@
<completionCondition>${nrOfInstances != nrOfActiveInstances}</completionCondition>
</multiInstanceLoopCharacteristics>
</userTask>
<sequenceFlow id="SequenceFlowId_e1011c3d23e14b4da461ad51642a37a4" name="审批节点" sourceRef="NODE_STARTER"
<sequenceFlow id="SequenceFlowId_2e6c51a28f654e089b05dea623b849aa" name="审批节点" sourceRef="NODE_STARTER"
targetRef="node_864990574287_ylc5"></sequenceFlow>
<serviceTask id="node_865038288523_ff8k" name="抄送节点"
flowable:delegateExpression="${engineCarbonCopyV2EventListener}">
@ -200,7 +200,7 @@
<![CDATA[{"id":"node_865038288523_ff8k","parentId":"node_864990574287_ylc5","type":"NODE_CARBON_COPY","name":"抄送节点","property":{"approverSpecify":"role_v2","approverSpecifyRange":"within_the_project_construction_units","cooperateShipType":"PROJ_PRIMARY_CONTRACTING_UNIT","approverSpecifyRangeUnit":"in_ent","initiatorSpecifiedFilter":false,"excludeIdentityTypes":[],"excludeCooperateShipTypes":[],"specifyValue":"[{\"name\":\"其他\",\"value\":101357,\"type\":7},{\"name\":\"首页-待删除\",\"value\":101289,\"type\":7},{\"name\":\"班组管理(劳资)\",\"value\":101290,\"type\":7},{\"name\":\"人员管理-T\",\"value\":101291,\"type\":7},{\"name\":\"查看企业通讯录\",\"value\":101292,\"type\":7},{\"name\":\"部门管理-T\",\"value\":101293,\"type\":7},{\"name\":\"班组管理\",\"value\":101294,\"type\":7},{\"name\":\"岗位权限管理-T\",\"value\":101295,\"type\":7},{\"name\":\"编辑工程-待删除\",\"value\":101296,\"type\":7},{\"name\":\"查看工程\",\"value\":101297,\"type\":7},{\"name\":\"申请工程完结-待删除\",\"value\":101356,\"type\":7},{\"name\":\"发薪账户管理\",\"value\":101298,\"type\":7},{\"name\":\"查看发薪报表-T\",\"value\":101299,\"type\":7},{\"name\":\"招工\",\"value\":101300,\"type\":7}]","isMultiTask":true,"isSequential":false,"groupsType":"or","carbonCopyConf":[],"fieldPermission":[]}}]]></jsonValue>
</extensionElements>
</serviceTask>
<sequenceFlow id="SequenceFlowId_dbd8edeff8d44b1a8e2ac97570610de9" name="抄送节点"
<sequenceFlow id="SequenceFlowId_2e5686e25977452695e77d9bc987f406" name="抄送节点"
sourceRef="node_864990574287_ylc5" targetRef="node_865038288523_ff8k"></sequenceFlow>
<userTask id="node_865016003134_707l" name="业务节点" flowable:assignee="${assigneeName}"
flowable:formKey="test-form">
@ -293,9 +293,9 @@
<completionCondition>${nrOfInstances != nrOfActiveInstances}</completionCondition>
</multiInstanceLoopCharacteristics>
</userTask>
<sequenceFlow id="SequenceFlowId_3b9c207d9bca4cadbce6aba2463319fa" name="业务节点"
<sequenceFlow id="SequenceFlowId_9d31691309714dee93441f2426150027" name="业务节点"
sourceRef="node_865038288523_ff8k" targetRef="node_865016003134_707l"></sequenceFlow>
<sequenceFlow id="SequenceFlowId_2ed992f454044ef0bf3b3c43395a3e73" sourceRef="node_865016003134_707l"
<sequenceFlow id="SequenceFlowId_52b0f93d272d44fb981f18a17ea04ea8" sourceRef="node_865016003134_707l"
targetRef="endEventNode"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_id">
@ -318,36 +318,36 @@
<bpmndi:BPMNShape bpmnElement="NODE_STARTER" id="BPMNShape_NODE_STARTER">
<omgdc:Bounds height="60.0" width="100.0" x="80.0" y="0.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="SequenceFlowId_3b9c207d9bca4cadbce6aba2463319fa"
id="BPMNEdge_SequenceFlowId_3b9c207d9bca4cadbce6aba2463319fa">
<bpmndi:BPMNEdge bpmnElement="SequenceFlowId_9d31691309714dee93441f2426150027"
id="BPMNEdge_SequenceFlowId_9d31691309714dee93441f2426150027">
<omgdi:waypoint x="480.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="492.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="492.0" y="30.000000000000007"></omgdi:waypoint>
<omgdi:waypoint x="530.0" y="30.000000000000007"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlowId_e1011c3d23e14b4da461ad51642a37a4"
id="BPMNEdge_SequenceFlowId_e1011c3d23e14b4da461ad51642a37a4">
<omgdi:waypoint x="180.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="192.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="192.0" y="30.000000000000007"></omgdi:waypoint>
<omgdi:waypoint x="230.0" y="30.000000000000007"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlowId_65659954c3054d05bd8d95f8a11cd3b1"
id="BPMNEdge_SequenceFlowId_65659954c3054d05bd8d95f8a11cd3b1">
<omgdi:waypoint x="30.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="42.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="42.0" y="30.000000000000007"></omgdi:waypoint>
<omgdi:waypoint x="80.0" y="30.000000000000007"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlowId_2ed992f454044ef0bf3b3c43395a3e73"
id="BPMNEdge_SequenceFlowId_2ed992f454044ef0bf3b3c43395a3e73">
<bpmndi:BPMNEdge bpmnElement="SequenceFlowId_52b0f93d272d44fb981f18a17ea04ea8"
id="BPMNEdge_SequenceFlowId_52b0f93d272d44fb981f18a17ea04ea8">
<omgdi:waypoint x="630.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="642.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="642.0" y="30.000000000000004"></omgdi:waypoint>
<omgdi:waypoint x="680.0" y="30.000000000000004"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlowId_dbd8edeff8d44b1a8e2ac97570610de9"
id="BPMNEdge_SequenceFlowId_dbd8edeff8d44b1a8e2ac97570610de9">
<bpmndi:BPMNEdge bpmnElement="SequenceFlowId_2e6c51a28f654e089b05dea623b849aa"
id="BPMNEdge_SequenceFlowId_2e6c51a28f654e089b05dea623b849aa">
<omgdi:waypoint x="180.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="192.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="192.0" y="30.000000000000007"></omgdi:waypoint>
<omgdi:waypoint x="230.0" y="30.000000000000007"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlowId_ebf6747caaa541cf889d61c08f25dd92"
id="BPMNEdge_SequenceFlowId_ebf6747caaa541cf889d61c08f25dd92">
<omgdi:waypoint x="30.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="42.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="42.0" y="30.000000000000007"></omgdi:waypoint>
<omgdi:waypoint x="80.0" y="30.000000000000007"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlowId_2e5686e25977452695e77d9bc987f406"
id="BPMNEdge_SequenceFlowId_2e5686e25977452695e77d9bc987f406">
<omgdi:waypoint x="330.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="342.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="342.0" y="30.000000000000007"></omgdi:waypoint>