From a5f944c2bc0107e5df936937f1c33e5e03eb8fed Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期六, 06 九月 2025 19:15:48 +0800
Subject: [PATCH] 解锁增加解锁原因和展示

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java |  145 +++++++++++++++++++++++++++--------------------
 1 files changed, 83 insertions(+), 62 deletions(-)

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..c382b9f 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
@@ -7,11 +7,9 @@
 import org.springblade.core.oss.model.BladeFile;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.mdm.basesetting.machine.MachineService;
+import org.springblade.mdm.basesetting.machine.service.MachineService;
 import org.springblade.mdm.basesetting.machine.entity.Machine;
 import org.springblade.mdm.commons.contants.ParamConstants;
-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.excution.dispatch.FinishDataHandler;
@@ -38,6 +36,7 @@
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 
 /**
  * 鏅�氭淳宸ュ畬鎴愭暟鎹鐞嗗櫒锛屽姛鑳斤細鎻掑叆瀹℃壒琛ㄦ暟鎹紝DispatchFinishListener璋冪敤
@@ -73,15 +72,9 @@
 	 * @param flowProps 娴佺▼灞炴��
 	 */
 	public void handleData(FlowProgramProperties flowProps) {
-		// 鎵ц涓氬姟閫昏緫
+
+		//闇�瑕佸浐鍖栫殑鑺傜偣
 		NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId,  flowProps.getProcessInstanceId()).one();
-		//璇曞垏鐨�
-		pkgNode.setIsCured(1);
-		pkgNode.setIsLocked(NcNode.UNLOCK);
-		//璁剧疆杩囨湡鏃ユ湡
-		pkgNode.upgradeVersionNumber();
-		pkgNode.setExpireDate(calculateExpireDate());
-		nodeService.updateById(pkgNode);
 
 		List<NcNode> historyProgramPackageNodes = nodeService.getNodeHistory(pkgNode);
 		try {
@@ -90,98 +83,141 @@
 			log.error("鍥哄寲娴佺▼瀹屾垚寮傚父",e);
 			throw new ServiceException("鏅�氬浐鍖栨墽琛屽紓甯�"+e.getMessage());
 		}
-		addApproveTable(pkgNode,flowProps);
-		updateApproveRecordNodeId(flowProps.getProcessInstanceId(), pkgNode.getId());
+
 	}
 
 
 	/**
 	 * 灏嗚妭鐐瑰拰鍘嗗彶鑺傜偣鎸姩鍒板浐鍖栫殑鍚岀骇鑺傜偣涓�
-	 * @param pkgNode 瑕佹尓鍔ㄧ殑鑺傜偣
+	 * @param pkgNode1 瑕佸浐鍖栫殑鑺傜偣
 	 * @param historyProgramPackageNodes 绋嬪簭鍖呭悕 鍘嗗彶鑺傜偣
 	 */
-	void moveNodeToCuredTree(NcNode pkgNode,List<NcNode> historyProgramPackageNodes, FlowProgramProperties programProperties) throws IOException {
+	void moveNodeToCuredTree(NcNode pkgNode1,List<NcNode> historyProgramPackageNodes, FlowProgramProperties programProperties) throws IOException {
+
 		//鍒涘缓鑺傜偣鍒版満搴婄骇鍒�.(鍥哄寲鏍�)
 		NcNode machineNode = ncNodeAutoCreateService.createNodeTreeToMachine(programProperties);
 
-		pkgNode.setParentId(machineNode.getParentId());
-		pkgNode.setParentIds(machineNode.getParentIds());//鏇存柊涓婄骇鑺傜偣锛屼笅闈㈣繕瑕佺敤搴斾负鍦╤istoryProgramPackageNodes涓殑鍜岃繖涓笉鏄竴涓疄渚�
+		pkgNode1.setParentId(machineNode.getParentId());
+		pkgNode1.setParentIds(machineNode.getParentIds());//鏇存柊涓婄骇鑺傜偣锛屼笅闈㈣繕瑕佺敤搴斾负鍦╤istoryProgramPackageNodes涓殑鍜岃繖涓笉鏄竴涓疄渚�
+
+		//鏂板缓涓�涓妭鐐癸紝浣滀负鍥哄寲鑺傜偣锛岃�佽妭鐐逛繚鐣欎笉鍔�,缃负鑰佺増鏈�
+
 		//鏈哄簥涓嬬幇鍦ㄦ病鏈夋枃浠朵簡锛岀▼搴忓寘鍚嶅崌绾т笌鏈哄簥鍚岀骇浜嗭紝鏀逛负鎵惧埌鏈哄簥鍚岀骇绋嬪簭鍖呭悕鏇存柊浜�
-		//TODO 杩欎釜parentIds鏄笉鏄笉澶燂紵锛屼笉澶燂紝涓�涓満搴婁笅澶氫釜绋嬪簭鍖呯殑鎯呭喌涓嶈鍚э紝浣嗘槸鎸夌収鏍戯紝澶氫釜绋嬪簭鍖呬笉澶幇瀹�
 		this.nodeService.lambdaUpdate().likeRight(NcNode::getParentIds, machineNode.getParentIds())
 			.in(NcNode::getNodeType, Arrays.asList(NcNode.TYPE_PROGRAM_PACKAGE,NcNode.TYPE_PROGRAM_FILE))
-			.ne(NcNode::getId,pkgNode.getId())//涓嶈鏇存柊鏂板浐鍖栫殑鑺傜偣new
 			.set(NcNode::getIsLastEdition,0).set(NcNode::getIsLocked,1).update();
 
+		List<NcNode> programNodes = nodeService.getProgramFilesByPackageId(pkgNode1.getId());
+		boolean tryPkdNodeHasChild = !programNodes.isEmpty();
+		NcNode cureNode = createNewCureNodeByTargetNode(pkgNode1,tryPkdNodeHasChild);
+
 		for(NcNode hisPackageNode : historyProgramPackageNodes){
-			if(!hisPackageNode.getId().equals(pkgNode.getId())){
-				hisPackageNode.setIsLastEdition(0);
-			}
+			hisPackageNode.setIsLastEdition(0);
 			hisPackageNode.setParentId(machineNode.getParentId());
 			hisPackageNode.setParentIds(machineNode.getParentIds());//绋嬪簭鍖呬笌鏈哄簥鑺傜偣鍚岀骇
 
-			//澶勭悊绋嬪簭鍖呬笅灞傜殑绋嬪簭鑺傜偣111
-			List<NcNode> programNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,hisPackageNode.getId()).list();
+			//澶勭悊绋嬪簭鍖呬笅灞傜殑绋嬪簭鑺傜偣锛岃繖閲岋細鑰佺殑绋嬪簭鑺傜偣涓嶇敤鏇存柊涓哄巻鍙茬増鏈紝鍥犱负浼氬缓绔嬫柊鑺傜偣銆傚彧淇敼parentId 鍜� parentIds
+			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());
 
-				pfile = flowProgramFileService.getById(programNode.getFlowProgramFileId());
-				if(programNode.getParentId().equals(pkgNode.getId()) && !pfile.isProgram()){
+				pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId());
+				if(oldProgramNode.getParentId().equals(pkgNode1.getId()) && !pfile.isProgram()){
+
 					//褰撳墠鍥哄寲绋嬪簭鍖呭悕涓嬬殑鈥滃叾浠栨枃浠垛�濋潪绋嬪簭鏂囦欢銆備笉璁剧疆涓鸿�佺増鏈紝鐩存帴鎸埌鍥哄寲鏍戜笅,涓や釜缃戠粶涔嬮棿鍙氦鎹㈢▼搴忔枃浠讹紝鍏朵粬鏂囦欢鍙兘淇濈暀
-					programNode.setIsLastEdition(1);
+					//鍏朵粬鏂囦欢锛岄渶瑕佸鍒跺埌鏂板缓鐨勫浐鍖栬妭鐐逛笅
+					NcNode newOtherFileNode = new NcNode();
+					BeanUtils.copyProperties(oldProgramNode,newOtherFileNode);
+					EntityUtil.clearBaseProperties(newOtherFileNode);
+					newOtherFileNode.setParentId(cureNode.getId());
+					newOtherFileNode.setParentIds(cureNode.getParentIds()+","+cureNode.getId());
+					newOtherFileNode.setIsLastEdition(1);
+					nodeService.save(newOtherFileNode);
 				}
 
 			}
-			nodeService.updateBatchById(programNodes);
+			nodeService.updateBatchById(oriProgramNodes);
 		}
 		nodeService.updateBatchById(historyProgramPackageNodes);
 
-		Machine machine = machineService.getByCode(pkgNode.getMachineCode());
-		List<DictBiz> annoDicts = programAnnotationService.getAnnotionList();
+		Machine machine = machineService.getByCode(cureNode.getMachineCode());
+		List<DictBiz> annoDicts = programAnnotationService.getAnnotionDictList();
 		//鏂扮殑娴佺▼鏂囦欢锛岄渶瑕佸湪鍖呰妭鐐逛笅鏂板缓锛屼笉鑳界敤鑰佺殑
-		List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode.getProcessInstanceId()).list();
+		List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode1.getProcessInstanceId()).list();
 		for(FlowProgramFile flowProgramFile : files){
 			NcNode newProgNode = new NcNode();
-			BeanUtils.copyProperties(pkgNode,newProgNode);
+
+			BeanUtils.copyProperties(cureNode,newProgNode);
+			EntityUtil.clearBaseProperties(newProgNode);
+
 			newProgNode.setName(flowProgramFile.getName());
 			newProgNode.setNodeType(NcNode.TYPE_PROGRAM_FILE);
-			newProgNode.setParentId(pkgNode.getId());
-			newProgNode.setParentIds(pkgNode.getParentIds()+","+pkgNode.getId());
+			newProgNode.setParentId(cureNode.getId());
+			newProgNode.setParentIds(cureNode.getParentIds()+","+cureNode.getId());
 			newProgNode.setIsLastEdition(1);
 			newProgNode.setFlowProgramFileId(flowProgramFile.getId());
 			newProgNode.setIsCured(1);
+
+			setGhAnnotation(flowProgramFile,machine.getControlSystem(),annoDicts);
+
 			nodeService.save(newProgNode);
-
-			//淇敼鏂囦欢鍐呭鏇存柊娉ㄩ噴锛屽苟鏇存柊鏂囦欢鏁版嵁鐨勫湴鍧�
-			///鏇挎崲娉ㄩ噴鍚庢�绘槸涓嶈鍟�
-			setGhAnnotation(flowProgramFile,machine.getMachineGroupCode(),annoDicts);
-
-			//flowProgramFileService.updateById(flowProgramFile);
 		}
+
+
 	}
 
+	/**
+	 * 澶嶅埗寰呭浐鍖栬妭鐐规暟鎹紝鍒涘缓涓�涓柊鐨勫浐鍖栬妭鐐�
+	 * @param waitingCureNode 寰呭浐鍖栬妭鐐�
+	 * @return 鍥哄寲鑺傜偣
+	 */
+	NcNode createNewCureNodeByTargetNode(NcNode waitingCureNode,boolean tryPkdNodeHasProgramFiles){
+		//鏂板缓涓�涓妭鐐癸紝浣滀负鍥哄寲鑺傜偣锛岃�佽妭鐐逛繚鐣欎笉鍔�
+		NcNode cureNode = new NcNode();
+		BeanUtils.copyProperties(waitingCureNode, cureNode);
+		EntityUtil.clearBaseProperties(cureNode);
+		cureNode.setIsCured(1);
+		cureNode.setIsLocked(NcNode.UNLOCK);
+		cureNode.setIsLastEdition(1);
+		cureNode.setExpireDate(calculateExpireDate());//璁剧疆杩囨湡鏃ユ湡
 
+		Optional<NcNode> optOldCuredPackageNode = nodeService.lambdaQuery().eq(NcNode::getName,waitingCureNode.getName())
+			.eq(NcNode::getProcessNo,waitingCureNode.getProcessNo())
+			.eq(NcNode::getProcessEdition,waitingCureNode.getProcessEdition())
+			.eq(NcNode::getIsLastEdition,1).eq(NcNode::getIsCured,1).oneOpt();
+
+		if(optOldCuredPackageNode.isEmpty() && tryPkdNodeHasProgramFiles){
+			//涔嬪墠 娌℃湁宸插浐鍖栫殑绋嬪簭鍖呭悕锛屽垯鐩存帴鏇存柊鐗堟湰鍙凤紝濡傛灉鏈夛紝閭e氨浣跨敤node鐜板湪鐨勭増鏈彿锛屽洜涓轰笉鍙敤杞负璇曞垏锛屽鎵瑰畬鎴愬凡缁忓崌绾ersion
+			//tryPkdNodeHasProgramFiles 璇曞垏绋嬪簭鍖呬笅鏈夌▼搴忔枃浠舵墠闇�瑕佸崌绾х増鏈紙娌℃湁鏂囦欢鐨勬槸杞﹀簥锛屾棤鏂囦欢锛岀洿鎺ョ瓑寰呭洖浼狅級
+			cureNode.upgradeVersionNumber();
+		}
+
+		nodeService.save(cureNode);
+
+		return cureNode;
+	}
 	/**
 	 * 璁剧疆鍥哄寲娉ㄩ噴,瀹炵幇鏂瑰紡锛岃幏鍙栨枃浠跺瓧鑺備笅锛屼慨鏀瑰悗鏇挎崲鏂囦欢
 	 * @param flowProgramFile oss 鏂囦欢
 	 *
 	 */
-	void setGhAnnotation(FlowProgramFile flowProgramFile,String machineGroup,List<DictBiz> annoDicts) throws IOException {
+	void setGhAnnotation(FlowProgramFile flowProgramFile,String controlSystem,List<DictBiz> annoDicts) throws IOException {
 		String ossName = flowProgramFile.getOssName();
 		//
 		try(InputStream ins = ossTemplate.statFileStream(ossName);){
 			byte[] bytes = IOUtils.toByteArray(ins);
 			ByteArrayInputStream byteInputStream =  new ByteArrayInputStream(bytes);
 
-			InputStream finishedStream = programAnnotationService.setGHAnnotation(byteInputStream,machineGroup,annoDicts);
+			InputStream finishedStream = programAnnotationService.setGHAnnotation(byteInputStream,controlSystem,annoDicts);
 
 			try(finishedStream) {
 				finishedStream.reset();
 				BladeFile bfile = ossTemplate.putFile(flowProgramFile.getName(), finishedStream);
 				//鏇挎崲鍘熸湁鐨勬枃浠跺湴鍧�
 				flowProgramFile.setOssName(bfile.getName());
+
+				flowProgramFileService.updateById(flowProgramFile);
 			}
 		}
 	}
@@ -202,27 +238,12 @@
 		return DateUtil.toDate(now.plusMonths(month));
 	}
 
-	/**
-	 * 淇濆瓨瀹℃壒瀹屾垚鐨勮褰�
-	 * @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();
 	}
+	 */
 }

--
Gitblit v1.9.3