From 33714e9bae91e01880bc0acb01eea18f0eabb4a5 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期六, 09 八月 2025 18:25:17 +0800
Subject: [PATCH] 流程节点创建修改

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowContants.java                 |    9 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramExportDncPageVO.java         |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.xml       |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java   |   83 +++++++++++++++++---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeAutoCreateService.java     |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramApproved.java            |    5 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcNode.java                       |    4 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java          |   15 ++-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java          |    7 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java              |    7 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml                  |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java               |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java               |   12 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java |   58 ++++++++------
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/DispatchFinishListener.java        |    5 
 15 files changed, 168 insertions(+), 47 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 ea5b249..3845ae9 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
@@ -96,4 +96,13 @@
 	 */
 	public static final String VALIDITY_PERIOD = "validityPeriod";
 
+	/**
+	 * 绋嬪簭鍖呭悕
+	 */
+	public static final String PROGRAM_PACKAGE_NAME = "programPackageName";
+
+	/**
+	 * 浠诲姟杞﹂棿
+	 */
+	public static final String WORK_SHOP = "workShop";
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/DispatchFinishListener.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/DispatchFinishListener.java
index 5a8dc18..c8a07aa 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/DispatchFinishListener.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/DispatchFinishListener.java
@@ -56,7 +56,7 @@
 		String programName = NcNodeService.genProgramName(props.getDrawingNo(),props.getProcessNo());
 		NcNode packageNode = ncNodeService.getProgramPackageByName(programName);
 
-		addApproveTable(packageNode);
+		addApproveTable(packageNode,props.getTitle());
 
 		updateApproveRecordNodeId(instId,packageNode.getId());
 
@@ -64,7 +64,7 @@
 	}
 
 	//void updateFlowProgramFile(String instId){
-	void addApproveTable(NcNode packageNode){
+	void addApproveTable(NcNode packageNode,String title){
 		//List<FlowProgramFile> programFiles =  flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, instId).list();
 		//if(!programFiles.isEmpty()) {
 			//FlowProgramFile pf = programFiles.get(0);
@@ -72,6 +72,7 @@
 			//approved.setProgramName(pf.getProgramName());
 			approved.setProgramName(packageNode.getName());
 			approved.setNcNodeId(packageNode.getId());//绋嬪簭鍖呰妭鐐筰d
+			approved.setTitle(title);
 			approvedService.save(approved);
 			/*
 			NcNode pkgNode = ncNodeService.getProgramPackageByName(pf.getProgramName());
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
index 1c31720..0d6b29f 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
@@ -66,7 +66,7 @@
 		vars.put(FlowContants.PRODUCT_MODEL,startVO.getProductModel());
 
 		String programPkgName = NcNodeService.genProgramName(startVO.getDrawingNo(),startVO.getProcessNo());
-
+		vars.put(FlowContants.PROGRAM_PACKAGE_NAME,programPkgName);
 		NcNode curedProgramPackage = ncNodeService.getLastEditionCuredProgramPackage(programPkgName);
 		//璁剧疆鏄惁鏈夊浐鍖栫▼搴忔爣璁�
 		vars.put(FlowContants.HAS_CURED_PROGRAM,curedProgramPackage != null ? FlowContants.Y:FlowContants.N);
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 372356c..22d8e28 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
@@ -8,6 +8,7 @@
 import org.flowable.engine.runtime.ProcessInstance;
 import org.flowable.task.api.Task;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.mdm.flow.constants.FlowContants;
 import org.springframework.stereotype.Service;
@@ -46,6 +47,7 @@
 
 		Map<String, Object> vars = runtimeService.getVariables(processInstanceId);
 
+		programProperties.setTitle(String.valueOf(vars.get(FlowContants.TITLE)));
 		programProperties.setDrawingNo(String.valueOf(vars.get(FlowContants.DRAWING_NO)));
 		programProperties.setDrawingNoEdition(String.valueOf(vars.get(FlowContants.DRAWING_NO_EDITION)));
 		programProperties.setProductModel(String.valueOf(vars.get(FlowContants.PRODUCT_MODEL)));
@@ -60,6 +62,11 @@
 
 		programProperties.setCraftEdition(String.valueOf(vars.get(FlowContants.CRAFT_EDITION)));
 		programProperties.setHasCuredProgram(String.valueOf(vars.get(FlowContants.HAS_CURED_PROGRAM)));
+		programProperties.setIsProcessEditionSame(String.valueOf(vars.get(FlowContants.IS_PROCESS_EDITION_SAME)));
+
+		if(vars.containsKey(FlowContants.CURED_NODE_ID)){
+			programProperties.setCuredNodeId(Func.toLong(vars.get(FlowContants.CURED_NODE_ID)));
+		}
 
 		ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
 			.processInstanceId(processInstanceId)
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 1d2fc5c..f6aa2b7 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
@@ -11,6 +11,8 @@
 @Data
 public class FlowProgramProperties {
 	@Schema(description = "闆剁粍浠�/鍥惧彿")
+	private String title;
+	@Schema(description = "闆剁粍浠�/鍥惧彿")
 	private String drawingNo;
 	@Schema(description = "鍥惧彿鐗堟/璁捐鐗堟")
 	private String drawingNoEdition;
@@ -41,9 +43,14 @@
 	@Schema(description = "鏄惁鏈夊浐鍖栫▼搴�")
 	private String hasCuredProgram;
 
+	@Schema(description = "鍥哄寲绋嬪簭绋嬪簭鑺傜偣id锛堝鏋滄湁锛�")
+	private Long curedNodeId;
+
 	@Schema(description = "娴佺▼瀹炰緥id")
 	private String processInstanceId;
 
 	@Schema(description = "娴佺▼瀹氫箟key")
 	private String processDefinitionKey;
+	@Schema(description = "宸ュ簭鐗堟鏄惁涓�鑷�")
+	private String isProcessEditionSame;
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java
index 832a3c7..e21b15d 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java
@@ -11,11 +11,13 @@
 import org.springblade.mdm.flow.constants.FlowContants;
 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.service.NcNodeAutoCreateService;
 import org.springblade.mdm.program.service.NcNodeService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Map;
 
@@ -33,6 +35,7 @@
 	@Autowired
 	private FlowCommonService flowCommonService;
 
+	@Transactional
 	@Override
 	public void completeTask(String taskId, String processInstanceId, String comment, Map<String, Object> variables) {
 		Task task = currentTask(taskId);
@@ -56,33 +59,36 @@
 		addApproveRecord(taskId,comment,variables);
 
 		//鍦ㄧ紪鍒朵换鍔℃椂锛屽垱寤鸿妭鐐癸紙娌℃湁鑺傜偣鍒欏垱寤猴紝鏈夊氨鐩存帴浣跨敤
-		if(task.getTaskDefinitionKey().equals("programmingTask") && "Y".equals(operateResult)) {
-			ncNodeAutoCreateService.createNodeTreeWithProgram(flowCommonService.getProgramProperties(processInstanceId));
-		}
-		if(!"confirmIsUseableTask".equals(task.getTaskDefinitionKey())){
-			variables.remove(FlowContants.PROCESS_EDITION);//TODO 涓存椂閿欒鏄紝缁勯暱鎻愪氦鐨勬椂鍊欎細鎻愪氦涓�涓┖涓诧紝娓呯┖浜嗗唴閮ㄦ暟鎹�
-		}else{
-			//宸ュ簭鐗堟涓嶄竴鑷达紝骞朵笖瀹℃牳閫氳繃锛堝彲鐢級鏄紝鎵嶆洿鏂颁负鏂扮殑宸ュ簭鐗堟鍙�
-			Map<String, Object> currentVars = task.getProcessVariables();
-			if(StringUtils.equals(String.valueOf(currentVars.getOrDefault(FlowContants.IS_PROCESS_EDITION_SAME, FlowContants.Y)),FlowContants.N) && operateResult.equals(FlowContants.Y)){
-				//宸ュ簭鐗堟涓嶄竴鑷达紝骞朵笖瀹℃牳閫氳繃锛堝彲鐢級 鍗囩増,鏇存柊涓烘柊鐨勫伐搴忕増鏈紝鍚庣画杩涘叆 鏍″ 鑺傜偣
-				Object objProcessEdition = variables.get(FlowContants.PROCESS_EDITION);
-				if(objProcessEdition == null){
-					//搴旇鍗囩増锛屼絾鍓嶇娌℃湁浼犻�掕鍙傛暟
-					throw new ServiceException("璇峰綍鍏ユ柊鐨勫伐搴忕増鏈彿");
-				}
-				String newProcessEdition = String.valueOf(objProcessEdition);
-				NcNode programPkgNode= ncNodeService.getByProcessInstanceId(processInstanceId);
-				programPkgNode.setProcessEdition(newProcessEdition);
-				ncNodeService.updateById(programPkgNode);
+		if(task.getTaskDefinitionKey().equals("programmingTask") && FlowContants.Y.equals(operateResult)) {
+			FlowProgramProperties progProperties = flowCommonService.getProgramProperties(processInstanceId);
+			ncNodeAutoCreateService.createNodeTreeWithProgram(progProperties);
+			//鍘熸潵鐗堟鐨勭▼搴忥紝姝ゆ椂搴旇娓呴櫎锛屾槸涓嶆槸瑕佹尓杩囨潵鍛紵鐗堟宸茬粡涓嶅浜�
+			//TODO 鑰佽妭鐐规竻闄ゅ悧
 
-				//鍒涘缓绋嬪簭鏍�
-				//鑺傜偣鍦ㄨ瘯鍒囦笅杩樻槸鍥哄寲涓嬮潰锛熺‘璁や簡锛岃妭鐐瑰缓绔嬪湪璇曞垏涓嬶紝鏈�缁堣蛋鍥哄寲娴佺▼鍚庢墠杩涘叆鍥哄寲
-				//纭绋嬪簭鍙敤浜嗭紝杩涘叆鏍″銆傝繖閲岀洿鎺ュ缓绔嬭妭鐐癸紝鍥犱负鍙兘涓嶈蛋缂栫▼鑺傜偣浜�
-				this.ncNodeAutoCreateService.createNodeTreeWithProgram(flowCommonService.getProgramProperties(processInstanceId));
-			}else{
-				//宸ュ簭鐗堟涓�鑷达紝浣嗘槸鎷掔粷浜嗭紝鍚庣画浼氳繘鍏ョ紪鍒惰妭鐐�
-				variables.remove(FlowContants.PROCESS_EDITION);
+			//璧板埌缂栧埗鑺傜偣锛屽鏋滄槸鏈夊浐鍖栫▼搴忎笖閫氳繃浜嗭紝璇存槑闇�瑕佸崌鐗堬紙閲嶆柊缂栧啓锛夛紝灏嗗浐鍖栫殑鍘熸潵鐨勭▼搴忚缃甽astEdition=0
+			if(FlowContants.Y.equals(progProperties.getHasCuredProgram())) {
+				NcNode curedProgramPackage = ncNodeService.getById(Func.toLong(progProperties.getCuredNodeId()));
+				curedProgramPackage.setIsLastEdition(0);
+				curedProgramPackage.setIsLocked(1);
+				ncNodeService.updateById(curedProgramPackage);
+
+			}
+
+		}
+		variables.remove(FlowContants.PROCESS_EDITION);//涓嶈鍗囩増浜�
+		//if(!"confirmIsUseableTask".equals(task.getTaskDefinitionKey())){
+		if("confirmIsUseableTask".equals(task.getTaskDefinitionKey())){
+			//宸ュ簭鐗堟涓嶄竴鑷达紝骞朵笖瀹℃牳閫氳繃锛堝彲鐢級鏄紝鎵嶆洿鏂颁负鏂扮殑versionNumber
+			FlowProgramProperties progProperties = flowCommonService.getProgramProperties(processInstanceId);
+
+			if(FlowContants.Y.equals(operateResult)) {
+
+				if(FlowContants.N.equals(progProperties.getIsProcessEditionSame())) {
+					//纭绋嬪簭鍙敤 涓� 宸ュ簭鐗堟涓嶄竴鑷达紝杩涘叆鏍″銆傝繖閲岄渶瑕佸崌绾х▼搴忕殑鐗堟湰鍙�
+					Long curedNodeId = progProperties.getCuredNodeId();
+					ncNodeService.upgradeVersionNumber(curedNodeId);
+				}
+
 			}
 		}
 		taskService.complete(taskId, variables);
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 21be89d..ac26b23 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
@@ -190,4 +190,8 @@
 	public boolean hasCured() {
 		return this.isCured != null && this.isCured == 1;
 	}
+
+	public void upgradeVersionNUmber() {
+		this.versionNumber = genNewVersionNumber();
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramApproved.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramApproved.java
index 863f2f0..bdb88c3 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramApproved.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramApproved.java
@@ -27,4 +27,9 @@
 	 */
 	private String programName;
 
+	/**
+	 * 娴佺▼鏍囬
+	 */
+	private String title;
+
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml
index 7897467..b477dbe 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml
@@ -40,7 +40,7 @@
     </select>
     -->
     <sql id="all_columns">id,tenant_id,name,parent_id,parent_ids,node_type,status,create_dept,is_deleted,create_time,create_user,update_time,update_user</sql>
-    <sql id="all_columns_n">n.id,n.tenant_id,n.name,n.parent_id,n.parent_ids,n.node_type,n.description,n.remark,n.drawing_no,n.drawing_no_edition,n.craft_edition,n.is_last_edition,n.is_locked,n.process_edition,n.process_no,n.is_cured,n.process_instance_id,n.status,n.create_dept,n.is_deleted,n.create_time,n.create_user,n.update_time,n.update_user</sql>
+    <sql id="all_columns_n">n.id,n.tenant_id,n.name,n.parent_id,n.parent_ids,n.node_type,n.version_number,n.description,n.remark,n.drawing_no,n.drawing_no_edition,n.craft_edition,n.is_last_edition,n.is_locked,n.process_edition,n.process_no,n.is_cured,n.process_instance_id,n.status,n.create_dept,n.is_deleted,n.create_time,n.create_user,n.update_time,n.update_user</sql>
     <select id="lazyList" resultType="org.springblade.mdm.program.vo.NcNodeVO">
         select <include refid="all_columns_n"/>,dt.dict_value as node_type_name,u.name create_user_name,(
         SELECT
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.xml
index 2197972..f562247 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.xml
@@ -11,7 +11,7 @@
         <result column="is_deleted" property="isDeleted"/>
     </resultMap>
     <select id="exportDncPageQuery" resultType="org.springblade.mdm.program.vo.NcProgramExportDncPageVO">
-        select a.id,n.name,a.nc_node_id,n.drawing_no,n.drawing_no_edition,n.process_name,a.create_time from mdm_nc_program_approved a
+        select a.id,a.title,n.name,a.nc_node_id,n.drawing_no,n.drawing_no_edition,n.process_name,a.create_time from mdm_nc_program_approved a
             inner join mdm_nc_node n on a.nc_node_id=n.id
         <where>
             a.is_deleted=0
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java
index fdd4929..775e09c 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java
@@ -104,8 +104,9 @@
 					//鏌ヨ鏁版嵁搴擄紝瀵瑰簲涓婃墠鑳界‘璁ゆ椂鏈夋晥鐨勭▼搴忓寘
 					String packageName = StringUtils.removeEnd(entryName,"/");
 					NcNode programPackageNode = ncNodeService.getLastEditionTryingProgramPackage(packageName);
-					//List<NcNode> pkgList = ncNodeService.lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE).eq(NcNode::getName, packageName).eq(NcNode::getIsLastEdition,1).list();
-					//if(!pkgList.isEmpty()) {
+					NcNode curedProgramPkg = ncNodeService.getLastEditionCuredProgramPackage(packageName);
+
+					if(programPackageNode!=null && curedProgramPkg != null) {//鏃犲浐鍖栫▼搴忥紝鎵嶆斁鍏ュ垪琛�
 						//NcNode programPackageNode = pkgList.get(0);
 						progData.setId(programPackageNode.getId());
 						progData.setProgramName(packageName);
@@ -113,7 +114,8 @@
 						progData.setFileBackTime(DateUtil.fromInstant(entry.getLastModifiedTime().toInstant()));
 						progData.setProgramNo(programPackageNode.getProgramNo());
 						list.add(progData);
-					//}
+					}
+
 				}
 			}
 
@@ -181,6 +183,10 @@
 				String programPackageName = StringUtils.removeEnd(dir,"/");
 
 				NcNode oriProgramPkg = this.ncNodeService.getLastEditionTryingProgramPackage(programPackageName);
+				NcNode curedProgramPkg = ncNodeService.getLastEditionCuredProgramPackage(programPackageName);
+				if(curedProgramPkg != null){
+					throw new ServiceException(programPackageName+"宸茬粡鍥哄寲锛岃鍕块噸澶嶅叆搴撱��");
+				}
 				if(oriProgramPkg == null){
 					log.warn("鏂囦欢澶规湭鍙戠幇鍖归厤鐨勭▼搴忓寘鍚峽}",dir);
 					continue;
@@ -191,9 +197,10 @@
 				if(active){
 					throw new ServiceException(programPackageName+"姝e湪瀹℃壒涓紝璇峰嬁閲嶅鍏ュ簱銆�");
 				}
+				/*
 				if(oriProgramPkg.hasCured()){
 					throw new ServiceException(programPackageName+"宸茬粡鍥哄寲锛岃鍕块噸澶嶅叆搴撱��");
-				}
+				}*/
 
 				if(!programPackageIdList.contains(oriProgramPkg.getId())){
 					//涓嶅湪鍕鹃�夌殑鑼冨洿鍐�
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 dd2d8c9..963ace9 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
@@ -227,4 +227,6 @@
 
 		return ncNode;
 	}
+
+
 }
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 b54ece4..dae2753 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
@@ -281,4 +281,16 @@
 		return this.lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_FILE)
 			.eq(NcNode::getParentId,packageNodeId).eq(NcNode::getIsLastEdition,1).list();
 	}
+
+	/**
+	 * 鍗囩骇鐗堟湰鍙凤紙+1锛�
+	 * @param nodeId 鑺傜偣id
+	 */
+	@Transactional
+	public void upgradeVersionNumber(Long nodeId) {
+		NcNode node = this.getById(nodeId);
+		node.upgradeVersionNUmber();
+		this.updateById(node);
+
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
index 81f1daf..fa2d695 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
@@ -14,6 +14,7 @@
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.mdm.basesetting.machine.MachineService;
 import org.springblade.mdm.basesetting.machine.entity.Machine;
@@ -28,12 +29,17 @@
 import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
 import org.springblade.mdm.program.vo.DncSendBackData;
 import org.springblade.mdm.utils.FileContentUtil;
+import org.springblade.system.feign.IDictClient;
+import org.springblade.system.feign.ISysClient;
+import org.springblade.system.pojo.entity.Dict;
 import org.springframework.stereotype.Service;
 
 import java.io.*;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
@@ -48,6 +54,7 @@
 public class NcProgramExportDNCService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> {
 
 	//private final NcProgramService progService;
+	private final IDictClient dictClient;
 	private final MachineService machineService;
 	private final NcProgramApprovedService approvedService;
 	private final ApproveRecordService approveRecordService;
@@ -58,19 +65,16 @@
 	public static final String NODE_JSON_FILE = "exp_mdm_nc_node.json";
 	public static final String APPROVE_RECORD_JSON_FILE = "exp_mdm_approve_record.json";
 
+	public static final String ANNOTATION_DICT = "machine_annotation";
+
 	/**
 	 * 鍒嗛〉鏌ヨ
 	 * @param query 鏌ヨ鍙傛暟
 	 * @return
 	 */
 	public IPage<DncSendBackData> dncSendBackPageQuery(Query query) {
-
-		IPage<DncSendBackData> page = this.getBaseMapper().dncSendBackpageQuery(Condition.getPage(query),query);
-
-		return page;
-
+		return this.getBaseMapper().dncSendBackpageQuery(Condition.getPage(query),query);
 	}
-
 
 	/**
 	 * 瀵煎嚭dnc鍘嬬缉鍖�
@@ -109,26 +113,81 @@
 		List<NcNode> programNodes = ncNodeService.lambdaQuery().eq(NcNode::getParentId, approved.getNcNodeId()).list();
 
 		FlowProgramFile programFile;
-
+		NcNode programPackageNode = this.ncNodeService.getById(approved.getNcNodeId());
+		String status = "鏈浐鍖�";
+		if(programPackageNode.hasCured()){
+			status = "宸插浐鍖�";
+		}
+		List<Dict> annotationList = getAnnotionList();
 		for (NcNode node : programNodes) {
 			String filePathInZip = packageFolder + node.getName();
 			programFile = this.flowProgramFileService.getById(node.getFlowProgramFileId());
 
 			InputStream inputStream = ossTemplate.statFileStream(programFile.getOssName());
 			Machine machine = machineService.getByCode(node.getMachineCode());
-			InputStream addedIns = addSendPath(inputStream,machine.getProgSendDir());
-			this.addInputStreamToZip(zipOut,addedIns,filePathInZip);
+			InputStream addedIns1 = addSendDirAnnotation(inputStream,machine,annotationList);
+			InputStream addedIns2 = addProgramStatusAnnotation(addedIns1,status,machine,annotationList);
+			this.addInputStreamToZip(zipOut,addedIns2,filePathInZip);
 		}
 
 	}
 
 	/**
-	 * 鍔犲叆鏈哄簥涓嬪彂璺緞
+	 * 鑾峰彇瀛楀吀涓厤缃殑娉ㄩ噴
+	 * @return 瀛楀吀椤瑰垪琛�
+	 */
+	List<Dict> getAnnotionList(){
+		List<Dict> annotationList;
+		R<List<Dict>> dictsResult = dictClient.getList(ANNOTATION_DICT);
+		if(dictsResult.isSuccess()) {
+			annotationList = dictsResult.getData();
+		}else{
+			annotationList = Collections.emptyList();
+		}
+
+		return annotationList;
+	}
+	/**
+	 * 鍔犲叆鏈哄簥涓嬪彂璺緞鍜岀▼搴忕姸鎬佺殑娉ㄩ噴
 	 * @param inputStream
 	 * @return
 	 */
-	InputStream addSendPath(InputStream inputStream,String machineSendPath) throws IOException {
-		return FileContentUtil.insertLine(inputStream,1,machineSendPath);
+	InputStream addSendDirAnnotation(InputStream inputStream,Machine machine,List<Dict> annotationList) throws IOException {
+		return FileContentUtil.insertLine(inputStream,1,generateAnnotation(machine.getProgSendDir(),machine.getMachineGroupCode(),annotationList));
+	}
+
+	/**
+	 * 娣诲姞绋嬪簭涓撴敼鐨勬敞閲�
+	 * @param inputStream
+	 * @param status 绋嬪簭鐘舵��
+	 * @param machine
+	 * @param annotationList 閰嶇疆鐨勬敞閲婂瓧鍏稿垪琛�
+	 * @return
+	 * @throws IOException
+	 */
+	InputStream addProgramStatusAnnotation(InputStream inputStream,String status,Machine machine,List<Dict> annotationList) throws IOException {
+		return FileContentUtil.insertLine(inputStream,2,generateAnnotation(status,machine.getMachineGroupCode(),annotationList));
+	}
+
+	String generateAnnotation(String oriTest,String machineGroupCode,List<Dict> annotationList) {
+		R<List<Dict>> dictsResult = dictClient.getList(ANNOTATION_DICT);
+		String annotation = oriTest;
+		String begin = "(";
+		String end = ")";
+
+		Optional<Dict> dictOpt = dictsResult.getData().stream().filter(dict -> {return dict.getDictKey().equals(machineGroupCode);}).findFirst();
+		String annotationSetting = "(,)";
+		if(dictOpt.isPresent()) {
+			annotationSetting = dictOpt.get().getDictValue();
+		}
+		String[] arr = annotationSetting.split(",");
+		if(arr.length == 2){
+			begin = arr[0];
+			end = arr[1];
+		}
+
+		annotation = begin + oriTest + end;
+		return annotation;
 
 	}
 	/**
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramExportDncPageVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramExportDncPageVO.java
index e8e4daf..b05ec19 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramExportDncPageVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramExportDncPageVO.java
@@ -11,6 +11,8 @@
 @Setter
 @Getter
 public class NcProgramExportDncPageVO extends BaseVO {
+	@Schema(description = "娴佺▼鏍囬")
+	private String title;
 	@Schema(description = "绋嬪簭鍚嶇О")
 	private String name;
 	@Schema(description = "鍥惧彿")

--
Gitblit v1.9.3