From 053a438acf9ec33e182b25211ce8108f0367feac Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期三, 06 八月 2025 09:35:58 +0800
Subject: [PATCH] 固化流程,建立node;

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeAutoCreateService.java |  194 ++++++++++++++++++++++++++---------------------
 1 files changed, 107 insertions(+), 87 deletions(-)

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 d528ca7..bea9b12 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
@@ -3,26 +3,20 @@
 
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springblade.core.mp.base.BizServiceImpl;
-import org.springblade.core.tool.utils.Func;
+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.service.FlowProgramProperties;
 import org.springblade.mdm.program.entity.NcNode;
-import org.springblade.mdm.program.mapper.NcNodeMapper;
-import org.springblade.mdm.program.vo.NcNodeQueryVO;
-import org.springblade.mdm.program.vo.NcNodeVO;
-import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Objects;
 import java.util.Optional;
 
 /**
- * 绋嬪簭鑺傜偣
+ * 绋嬪簭鑺傜偣鑷姩鍒涘缓鏈嶅姟锛屽湪 璇曞垏娴佺▼ 绋嬪簭缂栧埗 鑺傜偣 瀹℃牳閫氳繃鍚庤皟鐢�
  *
  * @author yangys
  */
@@ -33,51 +27,27 @@
 	private final NcNodeService ncNodeService;
 	private final FlowCommonService flowCommonService;
 	private final FlowProgramFileService flowProgramFileService;
-
-	public static final String SHIQIE_NAME = "璇曞垏";
-	public static final String GUHUA_NAME = "鍥哄寲";
+	private final ProgramSeqService programSeqService;
+	public static final String TRY_NAME = "璇曞垏";
+	public static final String CURE_NAME = "鍥哄寲";
 	public static final String PIANLI_NAME = "鍋忕";
+
 	/**
-	 * 鏍规嵁娴佺▼淇℃伅锛岃嚜鍔ㄥ垱寤哄悇涓妭鐐�
-	 * @param processInstanceId
+	 * 鍒涘缓鏍戝埌鏈哄簥绾у埆
+	 * @param programProperties
 	 */
-	public void createNodeTree(String processInstanceId) {
-		FlowProgramProperties programProperties = flowCommonService.getProgramProperties(processInstanceId);
+	@Transactional
+	public NcNode createNodeTreeToMachine(FlowProgramProperties programProperties) {
 
-		//,int rootNodeCatgory = 1:璇曞垏锛�2鍥哄寲锛�3鍋忕
-		NcNode programPkdNode = createTreeToProgramPackageByRootCategory(1,programProperties);
-
-		List<FlowProgramFile> programFiles = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, processInstanceId).list();
-		for (FlowProgramFile programFile : programFiles) {
-			createProgramFileNode(programFile,programPkdNode,programProperties);
-		}
-	}
-
-	private void createProgramFileNode(FlowProgramFile programFile, NcNode programPkdNode, FlowProgramProperties programProperties) {
-		NcNode node = new NcNode();
-		node.setNodeType(NcNode.TYPE_PROGRAM_FILE);
-		node.setName(programFile.getProgramName());
-		node.setParentId(programPkdNode.getId());
-		node.setParentIds(programPkdNode.getParentIds()+","+programPkdNode.getId());
-
-		node.setDrawingNo(programPkdNode.getDrawingNo());
-		node.setDrawingNoEdition(programProperties.getDrawingNoEdition());
-		node.setProcessNo(programProperties.getProcessNo());
-		node.setMachineCode(programProperties.getMachineCode());
-		node.setProductModel(programProperties.getProductModel());
-		ncNodeService.save(node);
-	}
-
-	NcNode createTreeToProgramPackageByRootCategory(int category,FlowProgramProperties programProperties) {
 		NcNode root;
-		if(category == 1){
+		if(programProperties.getProcessDefinitionKey().equals(FlowContants.TRY_PROCESS_KEY)){
 			//璇曞垏
-			root = rootNodeByName(SHIQIE_NAME);
+			root = rootNodeByName(TRY_NAME);
 			if(root == null){
-				root = createShiqieNode();
+				root = createTryNode();
 			}
-		}else if(category == 2){
-			root = rootNodeByName(GUHUA_NAME);
+		}else if(programProperties.getProcessDefinitionKey().equals(FlowContants.CURE_PROCESS_KEY)){
+			root = rootNodeByName(CURE_NAME);
 			if(root == null){
 				root = createCureNode();
 			}
@@ -88,49 +58,84 @@
 			}
 		}
 
+		NcNode lastNode = null;
 		//鍒涘缓浜у搧鍨嬪彿鑺傜偣
 		//NcNode productModelNode = createProductModelNode(programProperties.getProductModel(), root);
-		NcNode productModelNode = createNodeIfNotExists(programProperties.getProductModel(),NcNode.TYPE_PRODUCT_MODEL, root);
+		NcNode productModelNode = createNodeIfNotExists(programProperties.getProductModel(),NcNode.TYPE_PRODUCT_MODEL, root,programProperties);
 		//闆剁粍浠跺彿鑺傜偣
-		NcNode drawingNoNode = createNodeIfNotExists(programProperties.getDrawingNo(),NcNode.TYPE_DRAWING_NO, productModelNode);
+		NcNode drawingNoNode = createNodeIfNotExists(programProperties.getDrawingNo(),NcNode.TYPE_DRAWING_NO, productModelNode,programProperties);
 		//宸ヨ壓鐗堟鑺傜偣
-		NcNode craftEditionNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_CRAFT_EDITION, drawingNoNode);
+		NcNode craftEditionNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_CRAFT_EDITION, drawingNoNode,programProperties);
 		//宸ュ簭鍙疯妭
-		NcNode processNoNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_PROCESS_NO, craftEditionNode);
+		NcNode processNoNode = createNodeIfNotExists(programProperties.getProcessNo(),NcNode.TYPE_PROCESS_NO, craftEditionNode,programProperties);
 		//宸ュ簭鐗堟鑺傜偣
-		NcNode processEditionNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_PROCESS_EDITION, processNoNode);
+		NcNode processEditionNode = createNodeIfNotExists(programProperties.getProcessEdition(),NcNode.TYPE_PROCESS_EDITION, processNoNode,programProperties);
 		//鍔犲伐鏈哄簥鑺傜偣
-		NcNode machineCodeNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_MACHINE_CODE, processEditionNode);
-		//绋嬪簭鍖呭悕鑺傜偣
-		NcNode programPkgNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_PROGRAM_PACKAGE, machineCodeNode);
-
-		return programPkgNode;
-		//绋嬪簭鏂囦欢鑺傜偣锛屽涓枃浠堕渶瑕佸惊鐜垱寤�
-
+		return createNodeIfNotExists(programProperties.getMachineCode(),NcNode.TYPE_MACHINE_CODE, processEditionNode,programProperties);
 	}
-	/*
-	NcNode createProductModelNode(String name,NcNode parentNode){
-		NcNode ncNode = new NcNode();
-		ncNode.setName(name);
-		ncNode.setParentId(parentNode.getId());
-		ncNode.setParentIds(parentNode.getParentIds()+","+parentNode.getId());
-		ncNode.setNodeType("15");
-		ncNodeService.save(ncNode);
-
-		return ncNode;
-	}
-
+	/**
+	 * 鏍规嵁娴佺▼淇℃伅锛岃嚜鍔ㄥ垱寤哄悇涓妭鐐�,鍖呮嫭绋嬪簭鑺傜偣
+	 * @param programProperties 绋嬪簭灞炴��
 	 */
+	@Transactional
+	public void createNodeTreeWithProgram(FlowProgramProperties programProperties) {
+		//,int rootNodeCatgory = 1:璇曞垏锛�2鍥哄寲锛�3鍋忕
+		NcNode programPkdNode = createTreeToPackage(programProperties);
+		//鍒犻櫎涔嬪墠鍒涘缓杩囩殑绋嬪簭鏂囦欢鑺傜偣(鍥犱负閲嶅鍦ㄧ紪鍒惰妭鐐瑰鎵�)锛岄伩鍏嶉噸澶嶆暟鎹�
+		this.ncNodeService.lambdaUpdate().eq(NcNode::getParentId, programPkdNode.getId()).remove();
+
+		List<FlowProgramFile> programFiles = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, programProperties.getProcessInstanceId()).list();
+		for (FlowProgramFile programFile : programFiles) {
+			createProgramFileNode(programFile, programPkdNode, programProperties);
+		}
+
+	}
+
+	private void createProgramFileNode(FlowProgramFile programFile, NcNode programPkdNode, FlowProgramProperties programProperties) {
+		//姝ゅ搴旈伩鍏嶉噸澶嶅垱寤�
+
+		NcNode node = new NcNode();
+		node.setNodeType(NcNode.TYPE_PROGRAM_FILE);
+		node.setName(programFile.getName());//鏂囦欢鍚嶏紝
+		node.setParentId(programPkdNode.getId());
+		node.setParentIds(programPkdNode.getParentIds()+","+programPkdNode.getId());
+		node.setIsLastEdition(1);
+		node.setDrawingNo(programPkdNode.getDrawingNo());
+		node.setDrawingNoEdition(programProperties.getDrawingNoEdition());
+		node.setCraftEdition(programProperties.getCraftEdition());
+		node.setProcessName(programProperties.getProcessName());
+		node.setProcessNo(programProperties.getProcessNo());
+		node.setMachineCode(programProperties.getMachineCode());
+		node.setProductModel(programProperties.getProductModel());
+		node.setFlowProgramFileId(programFile.getId());
+		node.setVersionNumber(1);
+		ncNodeService.save(node);
+	}
+
+	/**
+	 * 鍒涘缓鑺傜偣鍒扮▼搴忓寘绾у埆
+	 * @param programProperties
+	 * @param createProgramPkg
+	 * @return
+	 */
+	public NcNode createTreeToPackage(FlowProgramProperties programProperties) {
+		NcNode machineCodeNode = createNodeTreeToMachine(programProperties);
+		String programPkgName = programProperties.getDrawingNo()+"-"+programProperties.getProcessNo();//闆朵欢鍙峰姞宸ュ簭鍙�
+		return createNodeIfNotExists(programPkgName ,NcNode.TYPE_PROGRAM_PACKAGE, machineCodeNode,programProperties);
+
+	}
 
 	/**
 	 * 涓嶅瓨鍦ㄥ垯鍒涘缓鑺傜偣
 	 * @param name 鑺傜偣鍚嶇О
 	 * @param nodeType 鑺傜偣绫诲瀷
 	 * @param parentNode 鐖惰妭鐐�
+	 * @param programProperties 娴佺▼绋嬪簭灞炴��
 	 * @return
 	 */
-	NcNode createNodeIfNotExists(String name,String nodeType,NcNode parentNode){
-		Optional<NcNode>  nodeOpt = this.ncNodeService.lambdaQuery().eq(NcNode::getName,name).eq(NcNode::getNodeType,nodeType).eq(NcNode::getParentId,parentNode.getId()).oneOpt();
+	NcNode createNodeIfNotExists(String name,String nodeType,NcNode parentNode,FlowProgramProperties programProperties) {
+		Optional<NcNode>  nodeOpt = this.ncNodeService.lambdaQuery().eq(NcNode::getName,name).eq(NcNode::getNodeType,nodeType)
+			.eq(NcNode::getParentId,parentNode.getId()).eq(NcNode::getIsLastEdition,1).oneOpt();
 		if(nodeOpt.isPresent()){
 			return nodeOpt.get();
 		}else {
@@ -139,19 +144,31 @@
 			ncNode.setParentId(parentNode.getId());
 			ncNode.setParentIds(parentNode.getParentIds() + "," + parentNode.getId());
 			ncNode.setNodeType(nodeType);
+			ncNode.setVersionNumber(1);
+
+			//绋嬪簭鍖呰妭鐐瑰拰绋嬪簭鏂囦欢鑺傜偣鏁版嵁
+			if(NcNode.TYPE_PROGRAM_PACKAGE.equals(nodeType) || NcNode.TYPE_PROGRAM_FILE.equals(nodeType)){
+
+				String programNo = programSeqService.generageProgramNo();
+				ncNode.setProgramNo(programNo);
+				ncNode.setProcessInstanceId(programProperties.getProcessInstanceId());
+				ncNode.setDrawingNo(programProperties.getDrawingNo());
+				ncNode.setDrawingNoEdition(programProperties.getDrawingNoEdition());
+				ncNode.setCraftEdition(programProperties.getCraftEdition());
+				ncNode.setProcessNo(programProperties.getProcessNo());
+				ncNode.setProcessEdition(programProperties.getProcessEdition());
+				ncNode.setProcessName(programProperties.getProcessName());
+				ncNode.setMachineCode(programProperties.getMachineCode());
+				ncNode.setProductModel(programProperties.getProductModel());
+
+			}
+
+			ncNode.setIsLastEdition(1);
+
 			ncNodeService.save(ncNode);
 
 			return ncNode;
 		}
-	}
-
-	/**
-	 * 鏍硅妭鐐规槸鍚﹀瓨鍦紝鏍硅妭鐐瑰彧鏈� 璇曞垏/鍒嗙/鍥哄寲 3涓�
-	 * @param name 鑺傜偣鍚嶇О
-	 * @return
-	 */
-	boolean rootNodeExists(String name){
-		return ncNodeService.lambdaQuery().eq(NcNode::getName, name).eq(NcNode::getParentId, 0).count()>0;
 	}
 
 	NcNode rootNodeByName(String name){
@@ -162,13 +179,14 @@
 	/**
 	 * 鍒涘缓璇曞垏鑺傜偣锛堟牴锛�
 	 */
-	NcNode createShiqieNode() {
+	NcNode createTryNode() {
 		NcNode ncNode = new NcNode();
 		ncNode.setId(1L);
-		ncNode.setName(SHIQIE_NAME);
+		ncNode.setName(TRY_NAME);
 		ncNode.setParentId(0L);
-		ncNode.setParentIds("");
+		ncNode.setParentIds("0");
 		ncNode.setNodeType("10");
+		ncNode.setVersionNumber(1);
 		ncNodeService.save(ncNode);
 
 		return ncNode;
@@ -180,10 +198,11 @@
 	NcNode createCureNode() {
 		NcNode ncNode = new NcNode();
 		ncNode.setId(2L);
-		ncNode.setName(GUHUA_NAME);
+		ncNode.setName(CURE_NAME);
 		ncNode.setParentId(0L);
-		ncNode.setParentIds("");
+		ncNode.setParentIds("0");
 		ncNode.setNodeType("10");
+		ncNode.setVersionNumber(1);
 		ncNodeService.save(ncNode);
 
 		return ncNode;
@@ -194,8 +213,9 @@
 		ncNode.setId(3L);
 		ncNode.setName(PIANLI_NAME);
 		ncNode.setParentId(0L);
-		ncNode.setParentIds("");
+		ncNode.setParentIds("0");
 		ncNode.setNodeType("10");
+		ncNode.setVersionNumber(1);
 		ncNodeService.save(ncNode);
 
 		return ncNode;

--
Gitblit v1.9.3