From 9bc9760ef1d80c49a76b3abe16cb1408e5d185b7 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期五, 08 八月 2025 11:46:57 +0800
Subject: [PATCH] 替换流程基本实现

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/ReplaceProgramFileMapper.java        |    1 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/ReplaceProgramMapper.xml             |    3 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/ReplaceFlowController.java       |   10 +-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceProgramFileService.java      |    4 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java               |   14 ++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceFlowService.java             |   44 ++++++++++++--
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/ReplaceFlowStartVO.java                  |    4 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/replace/ReplaceFinishListener.java |   55 +++++++++++------
 8 files changed, 101 insertions(+), 34 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/ReplaceFlowController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/ReplaceFlowController.java
index 3ec3c5a..ba4f0b1 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/ReplaceFlowController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/ReplaceFlowController.java
@@ -47,12 +47,12 @@
 
 
 	@PostMapping("/prestart")
-	@Operation(summary = "鍑嗗绋嬪簭鏇挎崲娴佺▼", description = "鍑嗗绋嬪簭鏇挎崲娴佺▼锛屾墦寮�鐣岄潰涔嬪墠璋冪敤锛岃皟鐢ㄤ箣鍚庝細鍒濆鍖栨枃浠跺垪琛�")
-	public R<Long> prestart(@Parameter(description = "绋嬪簭鍖呭悕 鑺傜偣鐨刬d") Long nodeId) {
-		long tempId = System.currentTimeMillis();
+	@Operation(summary = "鍑嗗绋嬪簭鏇挎崲娴佺▼", description = "鍑嗗绋嬪簭鏇挎崲娴佺▼锛屾墦寮�鐣岄潰涔嬪墠璋冪敤锛岃皟鐢ㄤ箣鍚庝細鍒濆鍖栨枃浠跺垪琛�,")
+	public R<String> prestart(@Parameter(description = "绋嬪簭鍖呭悕 鑺傜偣鐨刬d") Long nodeId) {
+		String tempInstanceId = "REP"+System.currentTimeMillis();
 		try {
-			replaceFlowService.pre(nodeId,tempId);
-			return R.data(tempId);
+			replaceFlowService.pre(nodeId,tempInstanceId);
+			return R.data(tempInstanceId);
 		}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/replace/ReplaceFinishListener.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/replace/ReplaceFinishListener.java
index 79347d4..d624e59 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/replace/ReplaceFinishListener.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/replace/ReplaceFinishListener.java
@@ -7,6 +7,7 @@
 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;
@@ -25,8 +26,6 @@
 	@Autowired
 	private RuntimeService runtimeService;
 	@Autowired
-	private NcProgramApprovedService approvedService;
-	@Autowired
 	private ApproveRecordService approveRecordService;
 	@Autowired
 	private FlowProgramFileService flowProgramFileService;
@@ -38,31 +37,47 @@
 	 * @param execution 鎵ц瀵硅薄
 	 */
 	public void handle(DelegateExecution execution) {
+		ReplaceFlowService a;
 		// 鎵ц涓氬姟閫昏緫
 		String instId = execution.getProcessInstanceId();
+		Long nodeId = runtimeService.getVariable(execution.getId(),ReplaceFlowService.NODE_ID,Long.class);
 		log.info("浜嬩欢鍚嶇О{}锛宨nstid={}" , execution.getEventName(),instId);
-
-
-		log.info("娴佺▼宸插畬鎴恑n repalceFinishListener");
+		List<FlowProgramFile> programFiles =  flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, instId).list();
+		replacePragram(nodeId,programFiles);
+		log.info("娴佺▼宸插畬鎴� in replaceFinishListener");
 	}
 
-	void updateFlowProgramFile(String instId){
-		List<FlowProgramFile> programFiles =  flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, instId).list();
-		if(!programFiles.isEmpty()) {
-			FlowProgramFile pf = programFiles.get(0);
-			NcProgramApproved approved = new NcProgramApproved();
-			approved.setProgramName(pf.getProgramName());
+	/**
+	 * 鏇挎崲鍘熸潵绋嬪簭鐨勬枃浠�
+	 * @param programFiles 鏂扮殑鏂囦欢
+	 */
+	void replacePragram(Long nodeId,List<FlowProgramFile> programFiles){
+		NcNode packageNode = ncNodeService.getById(nodeId);
 
-			NcNode pkgNode = ncNodeService.getProgramPackageByName(pf.getProgramName());
-			if(pkgNode!=null) {
-				approved.setNcNodeId(pkgNode.getId());//绋嬪簭鍖呰妭鐐筰d
-				approvedService.save(approved);
-			}else{
-				log.warn("鏈壘鍒板悕涓簕}鐨勭▼搴忓寘",pf.getProgramName());
-			}
-		}else{
-			log.warn("娌℃湁绋嬪簭鏂囦欢");
+		List<NcNode> programFileNodes = ncNodeService.getProgramFilesByPackageId(nodeId);
+		for(NcNode fileNode: programFileNodes){
+			fileNode.setIsLastEdition(0);
+			ncNodeService.updateById(fileNode);
 		}
+
+		for(FlowProgramFile programFile: programFiles){
+			NcNode node = new NcNode();
+			node.setIsLastEdition(1);
+			node.setProcessEdition(packageNode.getProcessEdition());
+			node.setName(programFile.getName());
+			node.setParentIds(packageNode.getParentIds()+","+packageNode.getId());
+			node.setParentId(packageNode.getId());
+			node.setFlowProgramFileId(programFile.getId());
+			node.setMachineCode(packageNode.getMachineCode());
+			node.setProcessName(packageNode.getProcessName());
+			node.setNodeType(NcNode.TYPE_PROGRAM_FILE);
+			node.setVersionNumber(1);
+			node.setCraftEdition(packageNode.getCraftEdition());
+			node.setIsLocked(0);
+
+			ncNodeService.save(node);
+		}
+
 	}
 
 	void updateApproveRecordNodeId(NcNode pkgNode){
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/ReplaceProgramFileMapper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/ReplaceProgramFileMapper.java
index 9446499..b042bf0 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/ReplaceProgramFileMapper.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/ReplaceProgramFileMapper.java
@@ -7,4 +7,5 @@
 public interface ReplaceProgramFileMapper extends BladeMapper<ReplaceProgramFile> {
 
 
+	void deleteByTempId(Long tempId);
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/ReplaceProgramMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/ReplaceProgramMapper.xml
index 37455f5..b033b59 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/ReplaceProgramMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/ReplaceProgramMapper.xml
@@ -8,6 +8,9 @@
         <result column="update_time" property="updateTime"/>
         <result column="is_deleted" property="isDeleted"/>
     </resultMap>
+    <delete id="deleteByTempId">
+        delete from mdm_replace_program_file where temp_id=#{tempId}
+    </delete>
 
 
 </mapper>
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 8a8c43b..c1d1eef 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
@@ -38,12 +38,14 @@
 	private final FlowProgramFileService flowProgramFileService;
 	private final ReplaceProgramFileService replaceProgramFileService;
 	private final MachineService machineService;
+
+	public static final String NODE_ID = "nodeId";
 	/**
      * 杞淳锛屽苟璁板綍鑷繁鐨勫娉ㄤ俊鎭�
 	 * @param nodeId 鏇挎崲鐨勮妭鐐筰d
 	 */
 	@Transactional
-	public void pre(long nodeId,long tempId) {
+	public void pre(long nodeId,String tempInstanceId) {
 		List<NcNode> fileNodes = nodeService.lambdaQuery()
 			.eq(NcNode::getParentId, nodeId)
 			.eq(NcNode::getIsLastEdition,1)
@@ -53,14 +55,23 @@
 		List<FlowProgramFile> programFiles = flowProgramFileService.lambdaQuery()
 			.in(FlowProgramFile::getId, fileIds).list();
 
+
 		//灏嗙幇鏈夋枃浠跺鍒跺埌鐙珛鐨勮〃涓紝鍚庣画浣滀负瀹℃壒鐨勬枃浠讹紝瀹℃壒鐣岄潰璋冪敤鐨勬帴鍙d篃涓嶅悓锛屾渶濂藉崟鐙紑鍙�
 		for(FlowProgramFile programFile : programFiles) {
+			/*
 			ReplaceProgramFile replaceProgramFile = new ReplaceProgramFile();
 			BeanUtils.copyProperties(programFile, replaceProgramFile);
 			EntityUtil.clearBaseProperties(replaceProgramFile);
 			replaceProgramFile.setTempId(tempId);
 
 			replaceProgramFileService.save(replaceProgramFile);
+
+			 */
+			FlowProgramFile newFile = new FlowProgramFile();
+			BeanUtils.copyProperties(programFile, newFile);
+			EntityUtil.clearBaseProperties(newFile);
+			newFile.setProcessInstanceId(tempInstanceId);
+			flowProgramFileService.save(newFile);
 		}
 	}
 
@@ -68,7 +79,7 @@
 	 * 鍚姩鏇挎崲娴佺▼
 	 */
 	@Transactional
-	public String start(ReplaceFlowStartVO startVO){
+	public void start(ReplaceFlowStartVO startVO){
 
 		Map<String, Object> vars = new HashMap<>();
 		vars.put(FlowContants.ASSIGNEE,startVO.getAssignee());//绗竴涓鎵圭敤鎴�
@@ -91,14 +102,35 @@
 		vars.put(FlowContants.DRAWING_NO_EDITION,programPackge.getDrawingNoEdition());
 
 		vars.put(FlowContants.PRODUCT_MODEL,programPackge.getProductModel());
-
+		vars.put(NODE_ID, startVO.getNodeId());
 		identityService.setAuthenticatedUserId(String.valueOf(AuthUtil.getUserId()));//璁剧疆娴佺▼鍙戣捣浜�
-		ProcessInstance inst = runtimeService.startProcessInstanceByKey(FlowContants.REPLACE_PROCESS_KEY,"0",vars);
+		ProcessInstance inst = runtimeService.startProcessInstanceByKey(FlowContants.REPLACE_PROCESS_KEY,startVO.getNodeId()+"",vars);
+		//replaceProgramFileService.lambdaUpdate().eq(ReplaceProgramFile::getTempId,startVO.getTempId()).set(ReplaceProgramFile::getProcessInstanceId,inst.getProcessInstanceId());
 
+		flowProgramFileService.lambdaUpdate()
+			.eq(FlowProgramFile::getProcessInstanceId,startVO.getTempInstanceId())
+			.set(FlowProgramFile::getProcessInstanceId,inst.getProcessInstanceId()).update();
 
-		replaceProgramFileService.lambdaUpdate().eq(ReplaceProgramFile::getTempId,startVO.getTempId()).set(ReplaceProgramFile::getProcessInstanceId,inst.getProcessInstanceId());
+		/*
+		List<ReplaceProgramFile> repFiles = replaceProgramFileService.lambdaQuery().eq(ReplaceProgramFile::getTempId,startVO.getTempId()).list();
 
-		return inst.getProcessInstanceId();
+		for(ReplaceProgramFile repFile : repFiles) {
+			FlowProgramFile flowProgramFile = new FlowProgramFile();
+			BeanUtils.copyProperties(repFile, flowProgramFile);
+			flowProgramFile.setProgramName(programPackge.getName());
+
+			EntityUtil.clearBaseProperties(flowProgramFile);
+			flowProgramFile.setProcessInstanceId(inst.getId());
+			flowProgramFile.setIsCured(0);
+
+			flowProgramFileService.save(flowProgramFile);
+		}
+
+		//鏆傛椂娉ㄩ噴锛屾祴璇曟柟渚�
+		replaceProgramFileService.deleteByTempId(startVO.getTempId());
+
+		 */
+		//return inst.getProcessInstanceId();
 	}
 
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceProgramFileService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceProgramFileService.java
index a95fc2f..c79d935 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceProgramFileService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceProgramFileService.java
@@ -215,4 +215,8 @@
 		//System.out.println(tempstr);
 		return Func.toInt(tempstr);
 	}
+
+	public void deleteByTempId(Long tempId) {
+		this.baseMapper.deleteByTempId(tempId);
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/ReplaceFlowStartVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/ReplaceFlowStartVO.java
index b82009d..ea89e0c 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/ReplaceFlowStartVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/ReplaceFlowStartVO.java
@@ -12,8 +12,8 @@
 	private String title;
 	@Schema(description = "鏇挎崲鐨勭▼搴忓寘鍚峣d")
 	private Long nodeId;
-	@Schema(description = "涓存椂id,prestart鎺ュ彛鍙戦��")
-	private Long tempId;
+	@Schema(description = "涓存椂id,prestart鎺ュ彛鍙戦��,鍚姩娴佺▼鏃跺洖浼�")
+	private String tempInstanceId;
 
 	@Schema(description = "澶勭悊浜篿d")
 	private Long assignee;
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 05f5f1f..b54ece4 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
@@ -158,7 +158,9 @@
 	 * @return 绋嬪簭鎶ュ寘鍚嶇殑鑺傜偣
 	 */
 	public NcNode getProgramPackageByName(String programName) {
-		List<NcNode> pkgs = this.lambdaQuery().eq(NcNode::getName, programName).eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE).list();
+		List<NcNode> pkgs = this.lambdaQuery().eq(NcNode::getName, programName)
+			.eq(NcNode::getIsLastEdition,1)
+			.eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE).list();
 		if(pkgs.isEmpty()){
 			return null;
 		}else{
@@ -269,4 +271,14 @@
 	public void deleteSubNodes(Long nodeId) {
 		this.baseMapper.deleteSubNodes(nodeId);
 	}
+
+	/**
+	 * 鑾峰彇绋嬪簭鍖呬笅鎵�鏈夊眰搴忔枃浠惰妭鐐�
+	 * @param packageNodeId 绋嬪簭鍖呭悕 鑺傜偣id
+	 * @return 鍖呬笅灞炵殑绋嬪簭鏂囦欢
+	 */
+	public List<NcNode> getProgramFilesByPackageId(Long packageNodeId) {
+		return this.lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_FILE)
+			.eq(NcNode::getParentId,packageNodeId).eq(NcNode::getIsLastEdition,1).list();
+	}
 }

--
Gitblit v1.9.3