From 8db9b68d0bf4b7ec2e80b580f5931a40788caac7 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期六, 16 八月 2025 21:48:46 +0800
Subject: [PATCH] 替换流程bug修复
---
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/LockFlowController.java | 43 +++++++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/unlock/UnlockFinishListener.java | 52 ++++++++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java | 3
blade-service/blade-mdm/src/main/resources/processesbpmn/program-unlock.bpmn20.xml | 66 +++++++++++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java | 23 +++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java | 9
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java | 6 +
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceFlowService.java | 46 ++-----
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/LockFlowService.java | 66 +++++++++++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcNode.java | 4
10 files changed, 280 insertions(+), 38 deletions(-)
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/LockFlowController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/LockFlowController.java
new file mode 100644
index 0000000..5a2b651
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/LockFlowController.java
@@ -0,0 +1,43 @@
+package org.springblade.mdm.flow.controller;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.tool.api.R;
+import org.springblade.mdm.basesetting.producedivision.entity.ProduceDivision;
+import org.springblade.mdm.basesetting.producedivision.service.ProduceDivisionService;
+import org.springblade.mdm.flow.service.LockFlowService;
+import org.springblade.mdm.flow.service.ReplaceFlowService;
+import org.springblade.mdm.flow.vo.ReplaceFlowStartVO;
+import org.springblade.mdm.flow.vo.ReplaceUploadVO;
+import org.springblade.mdm.program.vo.NcNodeVO;
+import org.springframework.web.bind.annotation.*;
+
+@Slf4j
+@RestController
+@AllArgsConstructor
+@RequestMapping("/flow/lock")
+@Tag(name = "鏇挎崲娴佺▼", description = "鏇挎崲娴佺▼")
+public class LockFlowController {
+ private final LockFlowService replaceFlowService;
+
+
+ /**
+ * 鍙戣捣瑙i攣娴佺▼
+ */
+ @PostMapping("/start-unlock")
+ @Operation(summary = "鍙戣捣瑙i攣娴佺▼", description = "鍙戣捣瑙i攣娴佺▼")
+ public R<Boolean> start(@Parameter(description = "绋嬪簭鍖呭悕 鑺傜偣鐨刬d") Long nodeId,@Parameter(description = "澶勭悊浜篿d")String assingee) {
+ try {
+ replaceFlowService.startUnlock(nodeId,assingee);
+ return R.data(true);
+ }catch(Exception e){
+ log.error("鍙戣捣绋嬪簭鏇挎崲閿欒",e);
+ return R.fail(e.getMessage());
+ }
+
+ }
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
index c0f3859..f85c9bd 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
@@ -11,6 +11,7 @@
import org.springblade.mdm.basesetting.producedivision.service.ProduceDivisionService;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.entity.FlowProgramFile;
+import org.springblade.mdm.flow.service.FlowCommonService;
import org.springblade.mdm.flow.service.FlowProgramFileService;
import org.springblade.mdm.flow.vo.TaskAssignVO;
import org.springblade.mdm.program.entity.NcNode;
@@ -40,7 +41,7 @@
private final FlowProgramFileService flowProgramFileService;
private final NodeDeptQueryService nodeDeptQueryService;
private final ProduceDivisionService produceDivisionService;
-
+ private final FlowCommonService flowCommonService;
/**
* 鍚姩娲惧伐娴佺▼
@@ -50,9 +51,9 @@
@Transactional
public String start(TaskAssignVO startVO){
Map<String, Object> vars = new HashMap<>();
- //Map<String,Object> preAssignee = autoAssignUsersService.autoAssignUsers(startVO);
- this.putDefaultAssignees(vars,startVO.getDrawingNo());
-
+ //this.putDefaultAssignees(vars,startVO.getDrawingNo());
+ ProduceDivision div = flowCommonService.putDefaultAssignees(vars,startVO.getDrawingNo(),null);
+ vars.put(FlowContants.ASSIGNEE,div.getTeamLeaderId());//绗竴涓敤鎴风粍闀�
vars.put(FlowContants.TITLE,startVO.getTitle());
//鏈哄簥缂栧彿
vars.put(FlowContants.MACHINE_CODE,startVO.getMachineCode());
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/unlock/UnlockFinishListener.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/unlock/UnlockFinishListener.java
new file mode 100644
index 0000000..6bbdd02
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/unlock/UnlockFinishListener.java
@@ -0,0 +1,52 @@
+package org.springblade.mdm.flow.excution.unlock;
+
+import lombok.extern.slf4j.Slf4j;
+import org.flowable.engine.RuntimeService;
+import org.flowable.engine.delegate.DelegateExecution;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.mdm.flow.constants.FlowContants;
+import org.springblade.mdm.flow.entity.ApproveRecord;
+import org.springblade.mdm.flow.entity.FlowProgramFile;
+import org.springblade.mdm.flow.service.ApproveRecordService;
+import org.springblade.mdm.flow.service.FlowProgramFileService;
+import org.springblade.mdm.flow.service.ReplaceFlowService;
+import org.springblade.mdm.program.entity.NcNode;
+import org.springblade.mdm.program.entity.NcProgramApproved;
+import org.springblade.mdm.program.service.NcNodeService;
+import org.springblade.mdm.program.service.NcProgramApprovedService;
+import org.springblade.mdm.utils.EntityUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 瑙i攣瀹屾垚鎵ц鐨勪簨浠讹紝鍔熻兘锛氭彃鍏ュ鎵硅〃鏁版嵁
+ */
+@Slf4j
+@Component("unlockFinishListener")
+public class UnlockFinishListener {
+ @Autowired
+ private RuntimeService runtimeService;
+ @Autowired
+ private ApproveRecordService approveRecordService;
+ @Autowired
+ private FlowProgramFileService flowProgramFileService;
+ @Autowired
+ private NcProgramApprovedService ncProgramApprovedService;
+ @Autowired
+ private NcNodeService ncNodeService;
+ /**
+ * 鍦ㄦ祦绋嬬粨鏉熸椂鑷姩璋冪敤,锛堥厤缃湪瀹℃壒缁撴潫浜嬩欢鐨別xecutelistener涓簡锛�
+ * @param execution 鎵ц瀵硅薄
+ */
+ public void handle(DelegateExecution execution) {
+ // 鎵ц涓氬姟閫昏緫
+ String instId = execution.getProcessInstanceId();
+ Long nodeId = runtimeService.getVariable(execution.getId(),ReplaceFlowService.NODE_ID,Long.class);
+
+ this.ncNodeService.unlock(nodeId);
+ }
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java
index 0a39ee5..c19f79a 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java
@@ -1,5 +1,6 @@
package org.springblade.mdm.flow.service;
+import com.alibaba.excel.util.StringUtils;
import lombok.AllArgsConstructor;
import org.flowable.engine.HistoryService;
import org.flowable.engine.RuntimeService;
@@ -11,6 +12,8 @@
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.mdm.basesetting.producedivision.entity.ProduceDivision;
+import org.springblade.mdm.basesetting.producedivision.service.ProduceDivisionService;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -24,7 +27,7 @@
public class FlowCommonService {
private final RuntimeService runtimeService;
private final HistoryService historyService;
-
+ private final ProduceDivisionService produceDivisionService;
/**
* 鏍规嵁娴佺▼瀹炰緥id鑾峰彇definitionKey
* @param processInstanceId
@@ -126,6 +129,24 @@
}
return assignee;
}
+
+ /**
+ * 灏嗛粯璁ゅ鎵圭敤鎴锋斁鍏ap涓�
+ * @param vars 鍚姩娴佺▼鐨勫彉閲弇ap
+ * @param drawingNo 闆剁粍浠跺彿
+ */
+ public ProduceDivision putDefaultAssignees(Map<String, Object> vars,String drawingNo,String defaultAssignee){
+ ProduceDivision div = produceDivisionService.getByDrawingNoWithQinzhe(drawingNo);
+ vars.put(FlowContants.TEAM_LEADER,div.getTeamLeaderId());
+ vars.put(FlowContants.PROGRAMMER,div.getProgrammerId());
+ vars.put(FlowContants.CHECKER,div.getCheckerId());
+ vars.put(FlowContants.SENIOR,div.getSeniorId());
+ if(StringUtils.isNotBlank(defaultAssignee)) {
+ vars.put(FlowContants.ASSIGNEE, defaultAssignee);//绗竴涓鎵圭敤鎴凤細缁勯暱
+ }
+
+ return div;
+ }
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/LockFlowService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/LockFlowService.java
new file mode 100644
index 0000000..3b45487
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/LockFlowService.java
@@ -0,0 +1,66 @@
+package org.springblade.mdm.flow.service;
+
+import lombok.AllArgsConstructor;
+import org.flowable.engine.IdentityService;
+import org.flowable.engine.RuntimeService;
+import org.flowable.engine.runtime.ProcessInstance;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.mdm.flow.constants.FlowContants;
+import org.springblade.mdm.program.entity.NcNode;
+import org.springblade.mdm.program.service.NcNodeService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@AllArgsConstructor
+@Service
+public class LockFlowService {
+ private final NcNodeService nodeService;
+ private final RuntimeService runtimeService;
+ private final IdentityService identityService;
+ public static final String NODE_ID = "nodeId";
+
+
+ /**
+ * 鍚姩瑙i攣娴佺▼
+ */
+ @Transactional
+ public void startUnlock(Long nodeId,String assignee){
+ NcNode programPackage = nodeService.getById(nodeId);
+ Map<String, Object> vars = new HashMap<>();
+ vars.put(FlowContants.ASSIGNEE,assignee);//绗竴涓鎵圭敤鎴�
+
+ vars.put(FlowContants.TITLE,programPackage.getName()+"绋嬪簭鏇挎崲");
+
+ //鏈哄簥缂栧彿
+ vars.put(FlowContants.MACHINE_CODE,programPackage.getMachineCode());
+ //Machine machine = machineService.getByCode(programPackge.getMachineCode());
+ //鏈哄簥鍨嬪彿
+ //if(machine != null) {
+ //vars.put(FlowContants.MACHINE_MODE, programPackge.getMachineMode());
+ //}
+ vars.put(FlowContants.PROCESS_NO,programPackage.getProcessNo());
+ vars.put(FlowContants.PROCESS_NAME,programPackage.getProcessName());
+ vars.put(FlowContants.PROCESS_EDITION,programPackage.getProcessEdition());
+ vars.put(FlowContants.CRAFT_EDITION,programPackage.getCraftEdition());
+
+ vars.put(FlowContants.DRAWING_NO,programPackage.getDrawingNo());
+ vars.put(FlowContants.DRAWING_NO_EDITION,programPackage.getDrawingNoEdition());
+
+ vars.put(FlowContants.PROGRAM_PACKAGE_NAME,programPackage.getName());
+
+ vars.put(FlowContants.PRODUCT_MODEL,programPackage.getProductModel());
+ vars.put(NODE_ID, nodeId);
+
+ vars.put("comment", "add on start");
+ identityService.setAuthenticatedUserId(String.valueOf(AuthUtil.getUserId()));//璁剧疆娴佺▼鍙戣捣浜�
+ ProcessInstance inst = runtimeService.startProcessInstanceByKey(FlowContants.REPLACE_PROCESS_KEY,nodeId+"",vars);
+
+
+ }
+
+}
+
+
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceFlowService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceFlowService.java
index 1c24bcc..e9f4404 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceFlowService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceFlowService.java
@@ -14,6 +14,8 @@
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.mdm.basesetting.machine.MachineService;
import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.basesetting.producedivision.entity.ProduceDivision;
+import org.springblade.mdm.basesetting.producedivision.service.ProduceDivisionService;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.flow.entity.ReplaceProgramFile;
@@ -47,39 +49,12 @@
private final TaskService taskService;
private final IdentityService identityService;
private final FlowProgramFileService flowProgramFileService;
- private final ReplaceProgramFileService replaceProgramFileService;
private final ProgramFlowStatusQueryService flowStatusQueryService;
private final NodeDeptQueryService nodeDeptQueryService;
- private OssTemplate ossTemplate;
+ private final FlowCommonService flowCommonService;
+ private final OssTemplate ossTemplate;
public static final String NODE_ID = "nodeId";
- /**
- * 杞淳锛屽苟璁板綍鑷繁鐨勫娉ㄤ俊鎭�
- * @param nodeId 鏇挎崲鐨勮妭鐐筰d
- */
- /*
- @Transactional
- public void prestart(long nodeId,String tempInstanceId) {
- List<NcNode> fileNodes = nodeService.lambdaQuery()
- .eq(NcNode::getParentId, nodeId)
- .eq(NcNode::getIsLastEdition,1)
- .eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_FILE).list();
- List<Long> fileIds = fileNodes.stream().map(NcNode::getFlowProgramFileId).toList();
- List<FlowProgramFile> programFiles = flowProgramFileService.lambdaQuery()
- .in(FlowProgramFile::getId, fileIds).list();
-
-
- //灏嗙幇鏈夋枃浠跺鍒跺埌鐙珛鐨勮〃涓紝鍚庣画浣滀负瀹℃壒鐨勬枃浠讹紝瀹℃壒鐣岄潰璋冪敤鐨勬帴鍙d篃涓嶅悓锛屾渶濂藉崟鐙紑鍙�
- for(FlowProgramFile programFile : programFiles) {
- FlowProgramFile newFile = new FlowProgramFile();
- BeanUtils.copyProperties(programFile, newFile);
- EntityUtil.clearBaseProperties(newFile);
- newFile.setProcessInstanceId(tempInstanceId);
- flowProgramFileService.save(newFile);
- }
- }
-
- */
/**
* 鍑嗗鏇挎崲娴佺▼闇�瑕佺殑鏁版嵁
@@ -136,11 +111,14 @@
@Transactional
public void start(ReplaceFlowStartVO startVO){
+
+ NcNode programPackage = nodeService.getById(startVO.getNodeId());
+
Map<String, Object> vars = new HashMap<>();
- vars.put(FlowContants.ASSIGNEE,startVO.getAssignee());//绗竴涓鎵圭敤鎴�
+ flowCommonService.putDefaultAssignees(vars,programPackage.getDrawingNo(),startVO.getAssignee()+"");
vars.put(FlowContants.TITLE,startVO.getTitle());
- NcNode programPackage = nodeService.getById(startVO.getNodeId());
+
//鏈哄簥缂栧彿
vars.put(FlowContants.MACHINE_CODE,programPackage.getMachineCode());
//Machine machine = machineService.getByCode(programPackge.getMachineCode());
@@ -181,13 +159,13 @@
}
+
/**
* 涓婁紶绋嬪簭寰愭枃浠讹紙缂栧埗鑺傜偣璋冪敤锛�
* @param uploadVO 涓婁紶瀵硅薄
*/
public void uploadReplaceProgramFile(ReplaceUploadVO uploadVO) {
- //FlowProgramProperties progProps= flowCommonService.getProgramProperties(uploadVO.getProcessInstanceId());
MultipartFile file = uploadVO.getFile();
if(file.getSize() == 0){
throw new ServiceException("绋嬪簭鏂囦欢涓嶅彲涓虹┖鏂囦欢");
@@ -196,8 +174,10 @@
progProps.setDrawingNo(uploadVO.getDrawingNo());
progProps.setProcessNo(uploadVO.getProcessNo());
progProps.setProcessEdition(uploadVO.getProcessEdition());
+ if(FlowProgramFile.TYPE_PROGRAM.equals(uploadVO.getFileType())) {
+ ProgramFileNameCheckUtil.checkFilename(file.getOriginalFilename(),progProps);
+ }
- ProgramFileNameCheckUtil.checkFilename(file.getOriginalFilename(),progProps);
String programName = NcNodeService.genProgramName(progProps.getDrawingNo(),progProps.getProcessNo());
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcNode.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcNode.java
index 40767ff..d5d081a 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcNode.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcNode.java
@@ -221,4 +221,8 @@
public void lock() {
this.isLocked = LOCKED;
}
+
+ public void unlock() {
+ this.isLocked = UNLOCK;
+ }
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java
index 158b002..6309024 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java
@@ -321,4 +321,10 @@
node.lock();
this.updateById(node);
}
+ @Transactional
+ public void unlock(Long id) {
+ NcNode node = this.getById(id);
+ node.unlock();
+ this.updateById(node);
+ }
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java
index 70f4fb8..8e1535f 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java
@@ -54,6 +54,9 @@
private Integer isCured;
@Schema(description = "鏄惁鏈�鏂扮増鏈�")
private Integer isLastEdition;
+
+ @Schema(description = "鏄惁閿佸畾")
+ private Integer isLocked = 0;
@Schema(description = "鐗堟湰鍙�,绋嬪簭鍖呭悕鑺傜偣鐨勫睘鎬�")
private Integer versionNumber;
@Schema(description = "娴佺▼鐘舵��,绋嬪簭鍖呭悕鑺傜偣鐨勫睘鎬�")
diff --git a/blade-service/blade-mdm/src/main/resources/processesbpmn/program-unlock.bpmn20.xml b/blade-service/blade-mdm/src/main/resources/processesbpmn/program-unlock.bpmn20.xml
new file mode 100644
index 0000000..1e72f6a
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/resources/processesbpmn/program-unlock.bpmn20.xml
@@ -0,0 +1,66 @@
+<?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">
+ <process id="program-unlock" name="program-unlock" isExecutable="true">
+ <startEvent id="sid-69b14c2b-2d00-4e49-a5f8-67f6f60a8a03"/>
+ <endEvent id="unlockApproveEnd">
+ <extensionElements>
+ <flowable:executionListener expression="${unlockFinishListener.handle(execution)}" event="end"/>
+ </extensionElements>
+ </endEvent>
+ <endEvent id="sid-cac1097c-7a5c-4452-8b5d-551b01e03f67"/>
+ <userTask id="unlockApproveTask" flowable:assignee="${assignee}" name="楂樺笀瀹℃牳"/>
+ <sequenceFlow id="sid-030b6e4b-640a-41aa-a536-ddf9fb485ac1" sourceRef="sid-69b14c2b-2d00-4e49-a5f8-67f6f60a8a03" targetRef="unlockApproveTask"/>
+ <userTask id="unlockProgramConfirm" name="缂栧埗澶嶆牳" flowable:assignee="${assignee}"/>
+ <sequenceFlow id="sid-eef79355-70bc-4610-aece-b1aed2f9876a" sourceRef="unlockApproveTask" targetRef="unlockApproveEnd">
+ <conditionExpression>{approve=='Y'}</conditionExpression>
+ </sequenceFlow>
+ <sequenceFlow id="sid-be770b3a-d711-45df-8477-fdd73b84d85b" sourceRef="unlockApproveTask" targetRef="unlockProgramConfirm">
+ <conditionExpression>{approve=='N'}</conditionExpression>
+ </sequenceFlow>
+ <sequenceFlow id="sid-5a3d8229-b648-424a-a0f4-f356082d5375" sourceRef="unlockProgramConfirm" targetRef="sid-cac1097c-7a5c-4452-8b5d-551b01e03f67">
+ <conditionExpression>${approve=='N'}</conditionExpression>
+ </sequenceFlow>
+ <sequenceFlow id="sid-185054ce-c200-475e-8128-2369554b05cf" sourceRef="unlockProgramConfirm" targetRef="unlockApproveTask">
+ <conditionExpression>${approve=='Y'}</conditionExpression>
+ </sequenceFlow>
+ </process>
+ <bpmndi:BPMNDiagram id="BPMNDiagram_program-unlock">
+ <bpmndi:BPMNPlane bpmnElement="program-unlock" id="BPMNPlane_program-unlock">
+ <bpmndi:BPMNShape id="shape-0d3745b5-d492-4430-bfb3-975eac8a9852" bpmnElement="sid-69b14c2b-2d00-4e49-a5f8-67f6f60a8a03">
+ <omgdc:Bounds x="-180.0" y="-75.0" width="30.0" height="30.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape-9544d391-52f3-44d0-a3d0-1461593102f9" bpmnElement="unlockApproveEnd">
+ <omgdc:Bounds x="105.0" y="-90.0" width="30.0" height="30.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape-37a910c4-327e-4273-a60e-22de9f892bd9" bpmnElement="sid-cac1097c-7a5c-4452-8b5d-551b01e03f67">
+ <omgdc:Bounds x="55.0" y="10.0" width="30.0" height="30.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape-0eb28127-9a0b-4308-996a-9f19a0943921" bpmnElement="unlockApproveTask">
+ <omgdc:Bounds x="-70.0" y="-100.0" width="70.0" height="50.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="edge-d5bed6a4-0499-4c91-aa94-3cfa5ddfb5bb" bpmnElement="sid-030b6e4b-640a-41aa-a536-ddf9fb485ac1">
+ <omgdi:waypoint x="-150.0" y="-67.5"/>
+ <omgdi:waypoint x="-70.0" y="-87.5"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="shape-d54efb68-e798-45b5-a892-e75a5be60f08" bpmnElement="unlockProgramConfirm">
+ <omgdc:Bounds x="-155.0" y="-5.0" width="65.0" height="60.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="edge-a82c55eb-2bf4-4c8f-be88-07467b081f86" bpmnElement="sid-eef79355-70bc-4610-aece-b1aed2f9876a">
+ <omgdi:waypoint x="0.0" y="-75.0"/>
+ <omgdi:waypoint x="105.0" y="-75.0"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge-50638e38-39b8-4127-8992-b0efb6e0f1da" bpmnElement="sid-be770b3a-d711-45df-8477-fdd73b84d85b">
+ <omgdi:waypoint x="-70.0" y="-62.5"/>
+ <omgdi:waypoint x="-106.25" y="-5.0"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge-2a037d18-24db-4d77-8cdb-40033885876d" bpmnElement="sid-5a3d8229-b648-424a-a0f4-f356082d5375">
+ <omgdi:waypoint x="-90.0" y="25.0"/>
+ <omgdi:waypoint x="55.0" y="25.0"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge-bc8f223a-1a63-4206-b55d-f168040d127a" bpmnElement="sid-185054ce-c200-475e-8128-2369554b05cf">
+ <omgdi:waypoint x="-90.0" y="10.0"/>
+ <omgdi:waypoint x="-52.5" y="-50.0"/>
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+</definitions>
--
Gitblit v1.9.3