From 55e316d9f3ee4e3fd0ae21b193efa7b358a0ae00 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期六, 23 八月 2025 00:17:41 +0800
Subject: [PATCH] 不可用流程修复

---
 .gitignore                                                                                                    |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java |   32 +++++--
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeAutoCreateService.java        |   34 ++++----
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java |   48 +++++++++---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/DispatchFinishListener.java  |   75 ------------------
 5 files changed, 75 insertions(+), 116 deletions(-)

diff --git a/.gitignore b/.gitignore
index efc7569..d085dc3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,7 +25,7 @@
 *.war
 *.ear
 /target
-
+rebel.xml
 # Flattened pom
 .flattened-pom.xml
 /**/.flattened-pom.xml
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java
index 0755078..92d3bdc 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java
@@ -38,6 +38,7 @@
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 
 /**
  * 鏅�氭淳宸ュ畬鎴愭暟鎹鐞嗗櫒锛屽姛鑳斤細鎻掑叆瀹℃壒琛ㄦ暟鎹紝DispatchFinishListener璋冪敤
@@ -78,8 +79,16 @@
 		//璇曞垏鐨�
 		pkgNode.setIsCured(1);
 		pkgNode.setIsLocked(NcNode.UNLOCK);
+
+		Optional<NcNode> optOldCuredPackageNode = nodeService.lambdaQuery().eq(NcNode::getName,pkgNode.getName())
+			.eq(NcNode::getProcessNo,pkgNode.getProcessNo())
+			.eq(NcNode::getProcessEdition,pkgNode.getProcessEdition())
+			.eq(NcNode::getIsLastEdition,1).eq(NcNode::getIsCured,1).oneOpt();
 		//璁剧疆杩囨湡鏃ユ湡
-		pkgNode.upgradeVersionNumber();
+		if(optOldCuredPackageNode.isEmpty()){
+			//涔嬪墠 娌℃湁宸插浐鍖栫殑绋嬪簭鍖呭悕锛屽垯鐩存帴鏇存柊鐗堟湰鍙凤紝濡傛灉鏈夛紝閭e氨浣跨敤node鐜板湪鐨勭増鏈彿锛屽洜涓轰笉鍙敤杞负璇曞垏锛屽鎵瑰畬鎴愬凡缁忓崌绾ersion
+			pkgNode.upgradeVersionNumber();
+		}
 		pkgNode.setExpireDate(calculateExpireDate());
 		nodeService.updateById(pkgNode);
 
@@ -121,20 +130,20 @@
 			hisPackageNode.setParentIds(machineNode.getParentIds());//绋嬪簭鍖呬笌鏈哄簥鑺傜偣鍚岀骇
 
 			//澶勭悊绋嬪簭鍖呬笅灞傜殑绋嬪簭鑺傜偣111
-			List<NcNode> programNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,hisPackageNode.getId()).list();
+			List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,hisPackageNode.getId()).list();
 			FlowProgramFile pfile;
-			for(NcNode programNode : programNodes){
-				programNode.setParentIds(hisPackageNode.getParentIds()+","+hisPackageNode.getId());
-				programNode.setIsLastEdition(0);
+			for(NcNode oldProgramNode : oriProgramNodes){
+				oldProgramNode.setParentIds(hisPackageNode.getParentIds()+","+hisPackageNode.getId());
+				oldProgramNode.setIsLastEdition(0);
 
-				pfile = flowProgramFileService.getById(programNode.getFlowProgramFileId());
-				if(programNode.getParentId().equals(pkgNode.getId()) && !pfile.isProgram()){
+				pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId());
+				if(oldProgramNode.getParentId().equals(pkgNode.getId()) && !pfile.isProgram()){
 					//褰撳墠鍥哄寲绋嬪簭鍖呭悕涓嬬殑鈥滃叾浠栨枃浠垛�濋潪绋嬪簭鏂囦欢銆備笉璁剧疆涓鸿�佺増鏈紝鐩存帴鎸埌鍥哄寲鏍戜笅,涓や釜缃戠粶涔嬮棿鍙氦鎹㈢▼搴忔枃浠讹紝鍏朵粬鏂囦欢鍙兘淇濈暀
-					programNode.setIsLastEdition(1);
+					oldProgramNode.setIsLastEdition(1);
 				}
 
 			}
-			nodeService.updateBatchById(programNodes);
+			nodeService.updateBatchById(oriProgramNodes);
 		}
 		nodeService.updateBatchById(historyProgramPackageNodes);
 
@@ -144,7 +153,10 @@
 		List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode.getProcessInstanceId()).list();
 		for(FlowProgramFile flowProgramFile : files){
 			NcNode newProgNode = new NcNode();
+
 			BeanUtils.copyProperties(pkgNode,newProgNode);
+			EntityUtil.clearBaseProperties(newProgNode);
+
 			newProgNode.setName(flowProgramFile.getName());
 			newProgNode.setNodeType(NcNode.TYPE_PROGRAM_FILE);
 			newProgNode.setParentId(pkgNode.getId());
@@ -157,8 +169,6 @@
 			//淇敼鏂囦欢鍐呭鏇存柊娉ㄩ噴锛屽苟鏇存柊鏂囦欢鏁版嵁鐨勫湴鍧�
 			///鏇挎崲娉ㄩ噴鍚庢�绘槸涓嶈鍟�
 			setGhAnnotation(flowProgramFile,machine.getMachineGroupCode(),annoDicts);
-
-			//flowProgramFileService.updateById(flowProgramFile);
 		}
 	}
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/DispatchFinishListener.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/DispatchFinishListener.java
index aa2ac1d..bff2774 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/DispatchFinishListener.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/DispatchFinishListener.java
@@ -64,79 +64,4 @@
 		log.info("娴佺▼宸插畬鎴恑n DispatchFinishListener");
 	}
 
-	/**
-	 * 鑷姩鍒涘缓绋嬪簭鑺傜偣
-	 * @param progProperties 娴佺▼灞炴��
-	 */
-	/*
-	void createProgramNodes(FlowProgramProperties progProperties){
-		if(!FlowContants.Y.equals(progProperties.getHasCuredProgram())) {
-			//璇曞垏鎴栬�呭亸绂�
-			ncNodeAutoCreateService.createNodeTreeWithProgram(progProperties);
-		}else{
-			//鏈夊浐鍖�
-			//TODO 杩樿鍖哄垎鏄惁鍙敤鍒ゅ畾鏄惁鍙敤銆傚彲鐢ㄧ晫
-			if(FlowContants.N.equals(progProperties.getCureProgramUseable())) {
-				//鍥哄寲绋嬪簭涓嶅彲鐢紝闇�瑕侀噸鏂板缓绔嬬▼搴忓寘鍚嶅拰鏂囦欢鑺傜偣;鍙敤鎯呭喌鍦ㄦ祦绋嬪鎵逛腑宸茬粡鍗囩骇杩囪妭鐐逛簡
-				NcNode curedProgramPackage = ncNodeService.getById(Func.toLong(progProperties.getCuredNodeId()));
-
-				NcNode newCuredPkgNode = new NcNode();
-				BeanUtils.copyProperties(curedProgramPackage, newCuredPkgNode);
-				EntityUtil.clearBaseProperties(newCuredPkgNode);
-				newCuredPkgNode.setIsLastEdition(1);
-				newCuredPkgNode.setIsLocked(0);
-				newCuredPkgNode.upgradeVersionNumber();
-				ncNodeService.save(newCuredPkgNode);
-
-				//鏂扮殑娴佺▼瀵瑰簲鐨勬枃浠舵洿鏂板埌鏂拌妭鐐逛笅
-				List<FlowProgramFile> newFlowFileList = flowProgramFileService.listByProcessInstanceId(progProperties.getProcessInstanceId());
-				for (FlowProgramFile newFlowFile : newFlowFileList) {
-					NcNode newProgramNode = new NcNode();
-					BeanUtils.copyProperties(newCuredPkgNode, newProgramNode);
-					EntityUtil.clearBaseProperties(newProgramNode);
-
-					newProgramNode.setName(newFlowFile.getName());
-					newProgramNode.setNodeType(NcNode.TYPE_PROGRAM_FILE);
-					newProgramNode.setParentId(newCuredPkgNode.getId());
-					newProgramNode.setIsLastEdition(1);
-					newProgramNode.setIsLocked(0);
-					newProgramNode.setParentIds(newCuredPkgNode.getParentIds() + "," + newCuredPkgNode.getId());
-					newProgramNode.setFlowProgramFileId(newFlowFile.getId());
-					ncNodeService.save(newProgramNode);
-				}
-
-				//鍘熻妭鐐规洿鏂颁负鑰佺増鏈紝閿佸畾
-				curedProgramPackage.setIsLastEdition(0);
-				curedProgramPackage.setIsLocked(1);
-				ncNodeService.updateById(curedProgramPackage);
-			}
-		}
-	}
-	*/
-	/**
-	 * 淇濆瓨瀹℃壒瀹屾垚鐨勮褰�
-	 * @param packageNode
-	 * @param props
-	 */
-	/*
-	void addApproveTable(NcNode packageNode,FlowProgramProperties props){
-		NcProgramApproved approved = new NcProgramApproved();
-
-		approved.setProgramName(packageNode.getName());
-		approved.setNcNodeId(packageNode.getId());//绋嬪簭鍖呰妭鐐筰d
-		approved.setTitle(props.getTitle());
-		approved.setProgrammerId(props.getProgrammerId());
-		approvedService.save(approved);
-
-	}
-
-
-	void updateApproveRecordNodeId(String processInstanceId,Long nodeId){
-		//鏇存柊瀹℃壒璁板綍鐨刵cNodeId
-		approveRecordService.lambdaUpdate()
-			.eq(ApproveRecord::getProcessInstanceId, processInstanceId)
-			.set(ApproveRecord::getNcNodeId,nodeId).update();
-	}
-
-	 */
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java
index 00a9793..f0efed3 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java
@@ -45,27 +45,44 @@
 		String instId = props.getProcessInstanceId();
 
 		String programPkgName = NcNodeService.genProgramName(props.getDrawingNo(),props.getProcessNo());
-		createProgramNodes(props);
+		//NcNode packageNode =createProgramNodes(props);
+		NcNode packageNode;// = ncNodeAutoCreateService.createNodeTreeWithProgram(props);
+		if(FlowContants.Y.equals(props.getHasCuredProgram()) && FlowContants.Y.equals(props.getCureProgramUseable())){
+			//鏈夊浐鍖栵紝涓旂▼搴忓彲鐢�
+			packageNode = ncNodeService.getById(props.getCuredNodeId());
 
-		//TODO 鍋忕鍗曪紝鍜屽凡缁忓浐鍖栫殑绋嬪簭锛屾病鏈夊鐞�,:宸茬粡澶勭悊娌℃湁楠岃瘉
-		NcNode packageNode;
+		}else{
+			packageNode = ncNodeAutoCreateService.createNodeTreeWithProgram(props);
+		}
+
+		if(FlowContants.Y.equals(props.getHasCuredProgram()) && FlowContants.N.equals(props.getCureProgramUseable())){
+			//鏈夊浐鍖� 浣嗕笉鍙敤锛岃瘯鍒囪妭鐐圭殑鏂拌妭鐐� 鐗堟湰鍙蜂负 鍥哄寲鐗堟湰鍙�+1
+			NcNode curedPackageNode = ncNodeService.getById(props.getCuredNodeId());
+			packageNode.setVersionNumber(curedPackageNode.genNewVersionNumber());
+			ncNodeService.updateById(packageNode);
+		}
+		//NcNode packageNode;
+		/*
 		if(FlowContants.Y.equals(props.getHasCuredProgram())){
 			//鏈夊浐鍖栵紝涓旂▼搴忓彲鐢紝浠庡浐鍖栨爲鏌ヨ鑺傜偣.浣跨敤娴佺▼涓繚瀛樼殑鑺傜偣
-			//packageNode = ncNodeService.getLastEditionCuredProgramPackage(programPkgName,props.getProcessEdition());
 			if(FlowContants.Y.equals(props.getCureProgramUseable())) {
 				packageNode = ncNodeService.getById(props.getCuredNodeId());
 			}else{
-				//涓嶅彲鐢紝鍘诲浐鍖栨壘鏈�鏂拌妭鐐�
-				packageNode = ncNodeService.getLastEditionCuredProgramPackage(programPkgName,props.getProcessEdition());
+				//涓嶅彲鐢紝鍘昏瘯鍒囨壘鏈�鏂拌妭鐐�
+				//packageNode = ncNodeService.getLastEditionCuredProgramPackage(programPkgName,props.getProcessEdition());
+				packageNode = ncNodeService.getLastEditionTryingProgramPackage(programPkgName,props.getProcessEdition());
+				//涓嶅彲鐢ㄧ殑鍥哄寲绋嬪簭閿佸畾
+				packageNode.lock();
+				ncNodeService.updateById(packageNode);
 			}
 		}else if(Func.isNotBlank(props.getDeviation())){
 			//鏈夊亸绂诲崟
 			packageNode = ncNodeService.getLastEditionDeviationProgramPackage(programPkgName,props.getProcessEdition());
 		}else{
-			//鏅�氳瘯鍒囷紝鎴栬�呮湁鍥哄寲涓嶅彲鐢�
+			//鏅�氳瘯鍒�
 			packageNode = ncNodeService.getLastEditionTryingProgramPackage(programPkgName,props.getProcessEdition());
 		}
-
+		*/
 		addApproveTable(packageNode,props);
 		updateApproveRecordNodeId(instId, packageNode.getId());
 		log.info("鏅�氭祦绋嬪凡瀹屾垚in DispatchFinishListener");
@@ -75,12 +92,17 @@
 	 * 鑷姩鍒涘缓绋嬪簭鑺傜偣
 	 * @param progProperties 娴佺▼灞炴��
 	 */
-	void createProgramNodes(FlowProgramProperties progProperties){
+	NcNode createProgramNodes(FlowProgramProperties progProperties){
+		NcNode programPkgNode = null;
 		if(FlowContants.N.equals(progProperties.getHasCuredProgram())) {
 			//鏃犲浐鍖�:(璇曞垏鎴栬�呭亸绂�)
-			ncNodeAutoCreateService.createNodeTreeWithProgram(progProperties);
+			programPkgNode = ncNodeAutoCreateService.createNodeTreeWithProgram(progProperties);
 		}else{
-			//鏈夊浐鍖栵紝绋嬪簭涓嶅彲鐢�
+			if(FlowContants.N.equals(progProperties.getCureProgramUseable())) {
+				programPkgNode = ncNodeAutoCreateService.createNodeTreeWithProgram(progProperties);//鏆傛椂涓庝笂闈娇鐢ㄧ浉鍚屼唬鐮侊紝createNodeTreeWithProgram涓尯鍒嗕簡鏅�氳瘯鍒囧拰涓嶅彲鐢ㄧ殑鎯呭喌
+			}
+			//鏈夊浐鍖栵紝绋嬪簭涓嶅彲鐢�,搴旇鍘昏瘯鍒囧缓绔嬭妭鐐�
+			/*
 			if(FlowContants.N.equals(progProperties.getCureProgramUseable())) {
 				//鍥哄寲绋嬪簭涓嶅彲鐢紝闇�瑕侀噸鏂板缓绔嬬▼搴忓寘鍚嶅拰鏂囦欢鑺傜偣;鍙敤鎯呭喌鍦ㄦ祦绋嬪鎵逛腑宸茬粡鍗囩骇杩囪妭鐐逛簡
 				NcNode curedProgramPackage = ncNodeService.getById(progProperties.getCuredNodeId());
@@ -114,8 +136,10 @@
 				curedProgramPackage.setIsLastEdition(0);
 				curedProgramPackage.setIsLocked(1);
 				ncNodeService.updateById(curedProgramPackage);
-			}
+			}*/
 		}
+
+		return programPkgNode;
 	}
 
 	/**
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeAutoCreateService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeAutoCreateService.java
index 9f93f02..f2ba2b4 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeAutoCreateService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeAutoCreateService.java
@@ -11,6 +11,8 @@
 import org.springblade.mdm.flow.service.FlowProgramFileService;
 import org.springblade.mdm.flow.service.FlowProgramProperties;
 import org.springblade.mdm.program.entity.NcNode;
+import org.springblade.mdm.utils.EntityUtil;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -42,8 +44,10 @@
 	public NcNode createNodeTreeToMachine(FlowProgramProperties programProperties) {
 		NcNode root;
 		if(programProperties.getProcessDefinitionKey().equals(FlowContants.TRY_PROCESS_KEY)){
-			if(Func.isEmpty(programProperties.getDeviation())){
-				//璇曞垏
+			if(Func.isEmpty(programProperties.getDeviation()) ||
+				(FlowContants.Y.equals(programProperties.getHasCuredProgram()) &&  FlowContants.N.equals(programProperties.getCureProgramUseable()))){
+				//鏅�氳瘯鍒囷紝鎴栬�呮湁鍥哄寲涓嶅彲鐢紝寤虹珛璇曞垏鑺傜偣
+				//璇曞垏鏍硅妭鐐�
 				root = rootNodeByName(TRY_NAME);
 				if (root == null) {
 					root = createTryNode();
@@ -79,27 +83,23 @@
 	/**
 	 * 鏍规嵁娴佺▼淇℃伅锛岃嚜鍔ㄥ垱寤哄悇涓妭鐐�,鍖呮嫭绋嬪簭鑺傜偣
 	 * @param programProperties 绋嬪簭灞炴��
+	 * @return 绋嬪簭鍖呰妭鐐瑰疄渚�
 	 */
 	@Transactional
-	public void createNodeTreeWithProgram(FlowProgramProperties programProperties) {
+	public NcNode createNodeTreeWithProgram(FlowProgramProperties programProperties) {
 		//,int rootNodeCatgory = 1:璇曞垏锛�2鍥哄寲锛�3鍋忕
 		NcNode programPkdNode = createTreeToPackage(programProperties);
 		//鍒犻櫎涔嬪墠鍒涘缓杩囩殑绋嬪簭鏂囦欢鑺傜偣(鍥犱负閲嶅鍦ㄧ紪鍒惰妭鐐瑰鎵�)锛岄伩鍏嶉噸澶嶆暟鎹�
-		//this.ncNodeService.lambdaUpdate().eq(NcNode::getParentId, programPkdNode.getId()).remove();
 		ncNodeService.deleteSubNodes(programPkdNode.getId());
 
 		List<FlowProgramFile> programFiles = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, programProperties.getProcessInstanceId()).list();
 		for (FlowProgramFile programFile : programFiles) {
 			createProgramFileNode(programFile, programPkdNode, programProperties);//鎵�鏈夋枃浠跺寘鎷▼搴忓拰鍏朵粬锛岄兘闇�瑕佸缓绔嬭妭鐐�
-			//if(programFile.isProgram()) {
-
-			//}
 		}
-		createOtherNode(programFiles);
+
+		return programPkdNode;
 	}
-	void  createOtherNode(List<FlowProgramFile> programFiles){
-//111mqita 鑺傜偣
-	}
+
 	/**
 	 * 寤虹珛绋嬪簭鏂囦欢鑺傜偣
 	 * @param programFile 娴佺▼鏂囦欢
@@ -110,10 +110,14 @@
 		//姝ゅ搴旈伩鍏嶉噸澶嶅垱寤�
 
 		NcNode node = new NcNode();
+		BeanUtils.copyProperties(programPkdNode, node);
+		EntityUtil.clearBaseProperties(node);
+
 		node.setNodeType(NcNode.TYPE_PROGRAM_FILE);
 		node.setName(programFile.getName());//鏂囦欢鍚嶏紝
 
 		node.setIsLastEdition(1);
+		/*
 		node.setDrawingNo(programPkdNode.getDrawingNo());
 		node.setDrawingNoEdition(programProperties.getDrawingNoEdition());
 		node.setCraftEdition(programProperties.getCraftEdition());
@@ -122,17 +126,13 @@
 		node.setProcessEdition(programProperties.getProcessEdition());
 		node.setMachineCode(programProperties.getMachineCode());
 		node.setProductModel(programProperties.getProductModel());
+
+		 */
 		node.setFlowProgramFileId(programFile.getId());
 		node.setVersionNumber(1);
 		node.setParentId(programPkdNode.getId());
 		node.setParentIds(programPkdNode.getParentIds()+","+programPkdNode.getId());
-		/*
-		if("program".equals(programFile.getFileType())){
 
-		}else{
-			//鍏朵粬鏂囦欢锛屽拰绋嬪簭鍖呭悕鍚岀骇骞跺垪
-
-		}*/
 
 		ncNodeService.save(node);
 	}

--
Gitblit v1.9.3