From b854c5cde81a88e8dea0b5df03219a2fcfef6ac6 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期六, 02 八月 2025 17:18:46 +0800
Subject: [PATCH] 自动创建节点

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowContants.java             |    5 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java      |   12 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java      |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java          |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeAutoCreateService.java |  203 ++++++++++++++++++++++++++++++++++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/CureProgramCheckTask.java |    3 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcNode.java                   |   53 +++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java     |    1 
 8 files changed, 273 insertions(+), 8 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowContants.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowContants.java
index adf4479..049a9a4 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowContants.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowContants.java
@@ -31,4 +31,9 @@
 	 * 浜у搧鍨嬪彿
 	 */
 	public static final String PRODUCT_MODEL = "productModel";
+
+	/**
+	 * 鏄惁鏈夊浐鍖栫▼搴�
+	 */
+	public static final String HAS_CURED_PROGRAM = "hasCuredProgram";
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java
index 090b3b1..81ed709 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java
@@ -24,6 +24,7 @@
 import org.springblade.mdm.flow.service.FlowProgramFileService;
 import org.springblade.mdm.flow.vo.TaskAssignVO;
 import org.springblade.mdm.program.entity.ProcessProgRef;
+import org.springblade.mdm.program.service.NcNodeAutoCreateService;
 import org.springblade.mdm.program.service.ProcessProgRefService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -52,6 +53,8 @@
 	private final FlowCommonService flowCommonService;
 
 	private final FlowProgramFileService flowProgramFileService;
+
+	private final NcNodeAutoCreateService ncNodeAutoCreateService;
 	/**
 	 * 鍙戣捣娲惧伐娴佺▼
 	 */
@@ -69,8 +72,8 @@
 		Task task = taskService.createTaskQuery()
 			.taskId(taskId)
 			.singleResult();
+		String operateResult = variables.get("approve")+"";
 		if(task.getTaskDefinitionKey().equals("programmingTask")) {//缂栧埗鑺傜偣
-			String operateResult = variables.get("approve")+"";
 			flowProgramFileService.checkProgramFiles(processInstanceId,"Y".equals(operateResult));
 		}
 		// 澧炲姞璇勮
@@ -81,6 +84,7 @@
 		if (Func.isEmpty(variables)) {
 			variables = Kv.create();
 		}
+		/*
 		String programIds = null;
 		if(variables.containsKey(FlowContants.PROGRAM_IDS_KEY)){
 			programIds = variables.get("programIds").toString();
@@ -90,6 +94,7 @@
 			//杩欏凡缁忔病鐢ㄤ簡锛岀洿鎺ヤ娇鐢ㄤ复鏃舵枃浠�
 			processProgRefService.addRelations(processInstanceId,Func.toLongList(programIds));
 		}
+		*/
 
 		//鍔犲叆瀹℃壒鐢ㄦ埛
 		variables.put("approveUserNickName",AuthUtil.getNickName());
@@ -98,7 +103,10 @@
 			addApproveRecord(taskId,processInstanceId,comment,variables);
 			//鎸囧畾浜嗕笅涓�姝ユ墽琛屼汉
 			taskService.complete(taskId, variables);
-
+			//鍦ㄧ紪鍒朵换鍔℃椂锛屽垱寤鸿妭鐐癸紙娌℃湁鑺傜偣鍒欏垱寤猴紝鏈夊氨鐩存帴浣跨敤
+			if(task.getTaskDefinitionKey().equals("programmingTask") && "Y".equals(operateResult)) {
+				ncNodeAutoCreateService.createNodeTree(processInstanceId);
+			}
 			return R.success("娴佺▼鎻愪氦鎴愬姛");
 		}else {
 			// 瀹屾垚浠诲姟,缁欓粯璁ょ敤鎴�
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 218c7bd..128e032 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
@@ -46,7 +46,7 @@
 		//鏁版嵁澶勭悊鍚嶇О涓虹増娆′互鍓嶏紝闆朵欢鍙峰姞宸ュ簭鍙凤細YZL4-1100-01-50 闆剁粍浠跺彿锛歒ZL4-1100-01 宸ュ簭鍙� 50
 
 		programProperties.setCraftEdition(String.valueOf(vars.get(FlowContants.CRAFT_EDITION)));
-
+		programProperties.setHasCuredProgram(String.valueOf(vars.get(FlowContants.HAS_CURED_PROGRAM)));
 		return programProperties;
 	}
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java
index 085a2a3..c1c02af 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java
@@ -189,6 +189,7 @@
 			throw new ServiceException("搴斾笂浼�"+totalSeg+"娈电▼搴忥紝瀹為檯涓婁紶"+flowPrograms.size()+"娈�");
 		}
 
+
 	}
 
 	/**
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java
index 85e0b58..2fb1a5c 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java
@@ -38,4 +38,6 @@
 	@Schema(description = "璁″垝寮�宸ユ椂闂�")
 	private LocalDate planStartTime;
 
+	@Schema(description = "鏄惁鏈夊浐鍖栫▼搴�")
+	private String hasCuredProgram;
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/CureProgramCheckTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/CureProgramCheckTask.java
index 8b013e1..f801545 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/CureProgramCheckTask.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/CureProgramCheckTask.java
@@ -10,7 +10,8 @@
 public class CureProgramCheckTask {
 
 	public void execute(DelegateExecution execution) {
-		//鍥哄寲绋嬪簭妫�鏌ユ湁鏁堟湡锛�
+		//鍥哄寲绋嬪簭妫�鏌ユ湁鏁堟湡锛屽伐搴忕増娆℃槸鍚︿竴鑷寸殑妫�鏌ワ紝瀹屽叏鏍规嵁绋嬪簭鍖呭悕杩涜妫�鏌ュ嵆鍙�
+		//TODO
 		String hasCuredProgram =  (String)execution.getVariable("hasCuredProgram");
 		NcProgram ncProgram =  (NcProgram)execution.getVariable("curedNcProgram");
 
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 fbc670b..3363924 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
@@ -9,6 +9,46 @@
 @Getter
 @TableName("mdm_nc_node")
 public class NcNode extends BizEntity {
+	/**
+	 * 鑺傜偣绫诲瀷锛� 绋嬪簭鐘舵�� 10
+	 */
+	public static final String TYPE_PROGRAM_STATUS = "10";
+	/*
+	浜у搧鍨嬪彿
+	 */
+	public static final String TYPE_PRODUCT_MODEL = "15";
+	/**
+	 * 鑺傜偣绫诲瀷锛� 闆剁粍浠跺彿/鍥惧彿 10
+	 */
+	public static final String TYPE_DRAWING_NO = "20";
+	/**
+	 * 宸ヨ壓鐗堟
+	 *
+	 */
+	public static final String TYPE_CRAFT_EDITION = "30";
+	/**
+	 * 宸ュ簭鍙�
+	 *
+	 */
+	public static final String TYPE_PROCESS_NO = "40";
+	/**
+	 * 宸ュ簭鐗堟
+	 */
+	public static final String TYPE_PROCESS_EDITION = "45";
+	/**
+	 * 鍔犲伐鏈哄簥
+	 */
+	public static final String TYPE_MACHINE_CODE = "50";
+	/**
+	 * 绋嬪簭鍖呭悕
+	 */
+	public static final String TYPE_PROGRAM_PACKAGE = "60";
+
+	/**
+	 * 绋嬪簭鏂囦欢
+	 */
+	public static final String TYPE_PROGRAM_FILE = "70";
+
 	private String name;
 	private Long parentId;
 
@@ -31,12 +71,12 @@
 	/**
 	 * 宸ュ簭鐗堟
 	 */
-	//private String processEdition;
+	private String processEdition;
 
 	/**
 	 * 宸ヨ壓鐗堟
 	 */
-	//private String craftEdition;
+	private String craftEdition;
 	/**
 	 * 闆剁粍浠跺彿/鍥惧彿
 	 */
@@ -44,7 +84,7 @@
 	/**
 	 * 鍥惧彿鐗堟
 	 */
-	//private String partNoEdition;
+	private String drawingNoEdition;
 
 	/**
 	 * 鏄惁鍥哄寲
@@ -65,6 +105,11 @@
 
 	private String description;
 	private String remark;
+	//0808鏂板
+	/**
+	 * 绋嬪簭鏂囦欢鑺傜偣鐨勬暟鎹�
+	 */
+	private String processNo;
 
-
+	private String productModel;
 }
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
new file mode 100644
index 0000000..d528ca7
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeAutoCreateService.java
@@ -0,0 +1,203 @@
+
+package org.springblade.mdm.program.service;
+
+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.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 java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * 绋嬪簭鑺傜偣
+ *
+ * @author yangys
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class NcNodeAutoCreateService  {
+	private final NcNodeService ncNodeService;
+	private final FlowCommonService flowCommonService;
+	private final FlowProgramFileService flowProgramFileService;
+
+	public static final String SHIQIE_NAME = "璇曞垏";
+	public static final String GUHUA_NAME = "鍥哄寲";
+	public static final String PIANLI_NAME = "鍋忕";
+	/**
+	 * 鏍规嵁娴佺▼淇℃伅锛岃嚜鍔ㄥ垱寤哄悇涓妭鐐�
+	 * @param processInstanceId
+	 */
+	public void createNodeTree(String processInstanceId) {
+		FlowProgramProperties programProperties = flowCommonService.getProgramProperties(processInstanceId);
+
+		//,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){
+			//璇曞垏
+			root = rootNodeByName(SHIQIE_NAME);
+			if(root == null){
+				root = createShiqieNode();
+			}
+		}else if(category == 2){
+			root = rootNodeByName(GUHUA_NAME);
+			if(root == null){
+				root = createCureNode();
+			}
+		}else{
+			root = rootNodeByName(PIANLI_NAME);
+			if(root == null){
+				root = createPianliNode();
+			}
+		}
+
+		//鍒涘缓浜у搧鍨嬪彿鑺傜偣
+		//NcNode productModelNode = createProductModelNode(programProperties.getProductModel(), root);
+		NcNode productModelNode = createNodeIfNotExists(programProperties.getProductModel(),NcNode.TYPE_PRODUCT_MODEL, root);
+		//闆剁粍浠跺彿鑺傜偣
+		NcNode drawingNoNode = createNodeIfNotExists(programProperties.getDrawingNo(),NcNode.TYPE_DRAWING_NO, productModelNode);
+		//宸ヨ壓鐗堟鑺傜偣
+		NcNode craftEditionNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_CRAFT_EDITION, drawingNoNode);
+		//宸ュ簭鍙疯妭
+		NcNode processNoNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_PROCESS_NO, craftEditionNode);
+		//宸ュ簭鐗堟鑺傜偣
+		NcNode processEditionNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_PROCESS_EDITION, processNoNode);
+		//鍔犲伐鏈哄簥鑺傜偣
+		NcNode machineCodeNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_MACHINE_CODE, processEditionNode);
+		//绋嬪簭鍖呭悕鑺傜偣
+		NcNode programPkgNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_PROGRAM_PACKAGE, machineCodeNode);
+
+		return programPkgNode;
+		//绋嬪簭鏂囦欢鑺傜偣锛屽涓枃浠堕渶瑕佸惊鐜垱寤�
+
+	}
+	/*
+	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 name 鑺傜偣鍚嶇О
+	 * @param nodeType 鑺傜偣绫诲瀷
+	 * @param parentNode 鐖惰妭鐐�
+	 * @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();
+		if(nodeOpt.isPresent()){
+			return nodeOpt.get();
+		}else {
+			NcNode ncNode = new NcNode();
+			ncNode.setName(name);
+			ncNode.setParentId(parentNode.getId());
+			ncNode.setParentIds(parentNode.getParentIds() + "," + parentNode.getId());
+			ncNode.setNodeType(nodeType);
+			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){
+		Optional<NcNode> rootOpt = ncNodeService.lambdaQuery().eq(NcNode::getName, name).eq(NcNode::getParentId, 0).oneOpt();
+		return rootOpt.orElse(null);
+	}
+
+	/**
+	 * 鍒涘缓璇曞垏鑺傜偣锛堟牴锛�
+	 */
+	NcNode createShiqieNode() {
+		NcNode ncNode = new NcNode();
+		ncNode.setId(1L);
+		ncNode.setName(SHIQIE_NAME);
+		ncNode.setParentId(0L);
+		ncNode.setParentIds("");
+		ncNode.setNodeType("10");
+		ncNodeService.save(ncNode);
+
+		return ncNode;
+	}
+
+	/**
+	 * 鍒涘缓鍥哄寲鑺傜偣锛堟牴锛�
+	 */
+	NcNode createCureNode() {
+		NcNode ncNode = new NcNode();
+		ncNode.setId(2L);
+		ncNode.setName(GUHUA_NAME);
+		ncNode.setParentId(0L);
+		ncNode.setParentIds("");
+		ncNode.setNodeType("10");
+		ncNodeService.save(ncNode);
+
+		return ncNode;
+	}
+
+	NcNode createPianliNode() {
+		NcNode ncNode = new NcNode();
+		ncNode.setId(3L);
+		ncNode.setName(PIANLI_NAME);
+		ncNode.setParentId(0L);
+		ncNode.setParentIds("");
+		ncNode.setNodeType("10");
+		ncNodeService.save(ncNode);
+
+		return ncNode;
+	}
+}

--
Gitblit v1.9.3