From a049dda2f63d59f5092994b44387fe0aa889d375 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期四, 14 八月 2025 15:01:04 +0800
Subject: [PATCH] 固化流程

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowContants.java                                |    4 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/service/ProduceDivisionService.java |    9 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java                         |   96 ++++++++++++++-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java                         |    3 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java                       |   11 -
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java                               |   56 +++++++++
 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                    |   13 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java                |   20 ++-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/DispatchFinishListener.java                       |   90 ++++++++++----
 10 files changed, 248 insertions(+), 56 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/service/ProduceDivisionService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/service/ProduceDivisionService.java
index 55bae69..ea069c9 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/service/ProduceDivisionService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/service/ProduceDivisionService.java
@@ -153,4 +153,13 @@
 			.eq(ProduceDivision::getCheckerId,division.getCheckerId()).eq(ProduceDivision::getSeniorId,division.getSeniorId())
 			.eq(ProduceDivision::getTeamLeaderId,division.getTeamLeaderId()).count()>0;
 	}
+
+	public ProduceDivision getByDrawingNo(String drawingNo){
+		List<ProduceDivision> divs = lambdaQuery().eq(ProduceDivision::getDrawingNo, drawingNo).list();
+		if(divs.isEmpty()){
+			return null;
+		}else{
+			return divs.get(0);
+		}
+	}
 }
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 2da26f7..6c8c798 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
@@ -110,4 +110,8 @@
 	 * 鍋忕鍗曞彿
 	 */
 	public static final String DEVIATION = "deviation";
+	/**
+	 * 鍥哄寲绋嬪簭锛屽鎵瑰叿浣撴槸鍚﹀彲鐢�
+	 */
+	public static final String CURE_PROGRAM_USEABLE = "cureProgramUseable";
 }
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 c8a07aa..ec04dbf 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
@@ -1,11 +1,11 @@
 package org.springblade.mdm.flow.excution;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.flowable.engine.RuntimeService;
 import org.flowable.engine.delegate.DelegateExecution;
 import org.flowable.engine.history.HistoricProcessInstance;
+import org.springblade.core.tool.utils.Func;
+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.service.ApproveRecordService;
@@ -14,15 +14,18 @@
 import org.springblade.mdm.flow.service.FlowProgramProperties;
 import org.springblade.mdm.program.entity.NcNode;
 import org.springblade.mdm.program.entity.NcProgramApproved;
+import org.springblade.mdm.program.service.NcNodeAutoCreateService;
 import org.springblade.mdm.program.service.NcNodeService;
 import org.springblade.mdm.program.service.NcProgramApprovedService;
+import org.springblade.mdm.utils.EntityUtil;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
 
 /**
- * 娲惧伐瀹℃壒瀹屾垚鎵ц鐨勪簨浠讹紝鍔熻兘锛氭彃鍏ュ鎵硅〃鏁版嵁
+ * 娲惧伐瀹℃壒閫氳繃鎵ц鐨勪簨浠讹紝鍔熻兘锛氭彃鍏ュ鎵硅〃鏁版嵁
  */
 @Slf4j
 @Component("dispatchFinishListener")
@@ -39,6 +42,8 @@
 	private FlowCommonService flowCommonService;
 	@Autowired
 	private NcNodeService ncNodeService;
+	@Autowired
+	private NcNodeAutoCreateService ncNodeAutoCreateService;
 	/**
 	 * 鍦ㄦ祦绋嬬粨鏉熸椂鑷姩璋冪敤,锛堥厤缃湪瀹℃壒缁撴潫浜嬩欢鐨別xecutelistener涓簡锛�
 	 * @param execution 鎵ц瀵硅薄
@@ -48,10 +53,9 @@
 		String instId = execution.getProcessInstanceId();
 		log.info("浜嬩欢鍚嶇О{}锛宨nstid={}" , execution.getEventName(),instId);
 
-		//灏嗗叧鑱旇〃涓殑鏁版嵁鎻掑叆瀹℃壒琛�
-		//NcNode packageNode = ncNodeService.getByProcessInstanceId(instId);
-
 		FlowProgramProperties props = flowCommonService.getProgramProperties(instId);
+
+		createProgramNodes(props);
 
 		String programName = NcNodeService.genProgramName(props.getDrawingNo(),props.getProcessNo());
 		NcNode packageNode = ncNodeService.getProgramPackageByName(programName);
@@ -63,28 +67,60 @@
 		log.info("娴佺▼宸插畬鎴恑n DispatchFinishListener");
 	}
 
-	//void updateFlowProgramFile(String instId){
-	void addApproveTable(NcNode packageNode,String title){
-		//List<FlowProgramFile> programFiles =  flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, instId).list();
-		//if(!programFiles.isEmpty()) {
-			//FlowProgramFile pf = programFiles.get(0);
-			NcProgramApproved approved = new NcProgramApproved();
-			//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());
-			if(pkgNode!=null) {
-				approved.setNcNodeId(pkgNode.getId());//绋嬪簭鍖呰妭鐐筰d
-				approvedService.save(approved);
-			}else{
-				log.warn("鏈壘鍒板悕涓簕}鐨勭▼搴忓寘",pf.getProgramName());
-			}
+	/**
+	 * 鑷姩鍒涘缓绋嬪簭鑺傜偣
+	 * @param progProperties 娴佺▼灞炴��
+	 */
+	void createProgramNodes(FlowProgramProperties progProperties){
+		//FlowProgramProperties progProperties = flowCommonService.getProgramProperties(processInstanceId);
+		if(!FlowContants.Y.equals(progProperties.getHasCuredProgram())) {
+			//璇曞垏鎴栬�呭亸绂�
+			ncNodeAutoCreateService.createNodeTreeWithProgram(progProperties);
 		}else{
-			log.warn("娌℃湁绋嬪簭鏂囦欢");
-		}*/
+			//鏈夊浐鍖�
+			//TODO 杩樿鍖哄垎鏄惁鍙敤鍒ゅ畾鏄惁鍙敤銆傚彲鐢ㄧ晫
+			if(!FlowContants.Y.equals(progProperties.getCureProgramUseable())) {
+				//鍥哄寲绋嬪簭涓嶅彲鐢紝闇�瑕侀噸鏂板缓绔嬬▼搴忓寘鍚嶅拰鏂囦欢鑺傜偣;鍙敤鎯呭喌鍦ㄦ祦绋嬪鎵逛腑宸茬粡鍗囩骇杩囪妭鐐逛簡
+				NcNode curedProgramPackage = ncNodeService.getById(Func.toLong(progProperties.getCuredNodeId()));
+
+				NcNode newCuredNode = new NcNode();
+				BeanUtils.copyProperties(curedProgramPackage, newCuredNode);
+				EntityUtil.clearBaseProperties(newCuredNode);
+				newCuredNode.setIsLastEdition(1);
+				newCuredNode.setIsLocked(0);
+				ncNodeService.save(newCuredNode);
+
+				//鏂扮殑娴佺▼瀵瑰簲鐨勬枃浠舵洿鏂板埌鏂拌妭鐐逛笅
+				List<FlowProgramFile> newFlowFileList = flowProgramFileService.lambdaQuery()
+					.eq(FlowProgramFile::getProcessInstanceId, progProperties.getProcessInstanceId()).list();
+				for (FlowProgramFile newFlowFile : newFlowFileList) {
+					NcNode newProgramNode = new NcNode();
+					newProgramNode.setName(newFlowFile.getName());
+					newProgramNode.setNodeType(NcNode.TYPE_PROGRAM_FILE);
+					newProgramNode.setParentId(newCuredNode.getParentId());
+					newProgramNode.setIsLastEdition(1);
+					newProgramNode.setIsLocked(0);
+					newProgramNode.setParentIds(newCuredNode.getParentIds() + "," + newCuredNode.getId());
+
+					ncNodeService.save(newProgramNode);
+				}
+
+				//鍘熻妭鐐规洿鏂颁负鑰佺増鏈紝閿佸畾
+				curedProgramPackage.setIsLastEdition(0);
+				curedProgramPackage.setIsLocked(1);
+				ncNodeService.updateById(curedProgramPackage);
+			}
+		}
+	}
+
+	void addApproveTable(NcNode packageNode,String title){
+		NcProgramApproved approved = new NcProgramApproved();
+		//approved.setProgramName(pf.getProgramName());
+		approved.setProgramName(packageNode.getName());
+		approved.setNcNodeId(packageNode.getId());//绋嬪簭鍖呰妭鐐筰d
+		approved.setTitle(title);
+		approvedService.save(approved);
+
 	}
 
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java
index 92482e5..9417af8 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java
@@ -13,6 +13,8 @@
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.mdm.basesetting.machine.MachineService;
 import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.basesetting.producedivision.entity.ProduceDivision;
+import org.springblade.mdm.basesetting.producedivision.service.ProduceDivisionService;
 import org.springblade.mdm.flow.constants.FlowContants;
 import org.springblade.mdm.flow.entity.FlowProgramFile;
 import org.springblade.mdm.flow.excution.AutoAssignUsersService;
@@ -50,7 +52,7 @@
 	private final NcNodeService ncNodeService;
 
 	private final FlowProgramFileService flowProgramFileService;
-
+	private final ProduceDivisionService produceDivisionService;
 	@Transactional
 	public void startCure(List<NcNode> programPackageList, Map<Long,List<NcNode>> allFlowProgramFilesMap) {
 		//鏍规嵁鍒嗙粍鍚姩娴佺▼锛屽苟鎻掑叆鍏宠仈琛�
@@ -125,6 +127,7 @@
 	 * @param vars 鎵惧埌瀹℃壒浜哄悗濉厖鐨刴ap
 	 * @param historicTasks 鍘嗗彶浠诲姟闆嗗悎
 	 */
+	@Deprecated
 	void fillHistoryAssignees(Map<String, Object> vars,List<HistoricTaskInstance> historicTasks){
 		String programmer = null;
 		String checker = null;
@@ -159,6 +162,57 @@
 		vars.put(FlowContants.SENIOR,senior);
 		vars.put(FlowContants.ASSIGNEE,programmer);
 	}
+
+	public void startCureNew(Map<Long, List<FlowProgramFile>> pkgIdFileMap) {
+		pkgIdFileMap.forEach((nodeId, fileList) -> {
+			this.startOneNew(nodeId,fileList);
+		});
+
+	}
+
+	private void startOneNew(Long nodeId, List<FlowProgramFile> fileList) {
+		Map<String, Object> vars = new HashMap<>();
+		NcNode programPackage = this.ncNodeService.getById(nodeId);
+
+		vars.put(FlowContants.MACHINE_CODE,programPackage.getMachineCode());
+		//鏈哄簥鍨嬪彿
+		//vars.put(FlowContants.MACHINE_MODE,programPackage.getm);
+		vars.put(FlowContants.PROCESS_NO,programPackage.getProcessNo());
+		vars.put(FlowContants.PROCESS_NAME,programPackage.getProcessName());
+		vars.put(FlowContants.PROCESS_EDITION,programPackage.getProcessEdition());
+		vars.put(FlowContants.CRAFT_EDITION, programPackage.getCraftEdition());
+		vars.put(FlowContants.DRAWING_NO,programPackage.getDrawingNo());
+		vars.put(FlowContants.DRAWING_NO_EDITION,programPackage.getDrawingNoEdition());
+
+		vars.put(FlowContants.PRODUCT_MODEL,programPackage.getProductModel());
+
+
+		ProduceDivision div = produceDivisionService.getByDrawingNo(programPackage.getDrawingNo());
+		if(div != null) {
+			vars.put(FlowContants.PROGRAMMER,div.getProgrammerId());
+			vars.put(FlowContants.CHECKER,div.getCheckerId());
+			vars.put(FlowContants.SENIOR,div.getSeniorId());
+			vars.put(FlowContants.TEAM_LEADER,div.getTeamLeaderId());
+		}
+
+		identityService.setAuthenticatedUserId(String.valueOf(AuthUtil.getUserId()));//璁剧疆娴佺▼鍙戣捣浜�
+
+		vars.put(FlowContants.LAST_STEP_USER_NICKNAME, AuthUtil.getNickName());
+		vars.put(FlowContants.TITLE,programPackage.getName()+"-鍥哄寲");//鑷姩澧炲姞鏍囬
+
+		ProcessInstance inst = runtimeService.startProcessInstanceByKey(FlowContants.CURE_PROCESS_KEY,"0",vars);
+
+		//鏇存柊绋嬪簭鍖呭悕鑺傜偣鐨勬祦绋嬪疄渚媔d
+		programPackage.setProcessInstanceId(inst.getProcessInstanceId());
+		ncNodeService.updateById(programPackage);
+
+		for(FlowProgramFile flowProgramFile : fileList){
+			flowProgramFile.setProcessInstanceId(inst.getProcessInstanceId());
+		}
+		this.flowProgramFileService.updateBatchById(fileList);
+
+		log.info("鍚姩鍥哄寲娴佺▼瀹屾垚锛屽疄渚媔d={}", inst.getId());
+	}
 	/**
 	 * 灏嗙▼搴忔寜鐓ф満鍣ㄤ唬鐮佸垎缁�
 	 * @param ncProgramIdList
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 ef6edea..0a39ee5 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
@@ -71,6 +71,8 @@
 		if(vars.containsKey(FlowContants.CURED_NODE_ID)){
 			programProperties.setCuredNodeId(Func.toLong(vars.get(FlowContants.CURED_NODE_ID)));
 		}
+		programProperties.setCureProgramUseable(String.valueOf(vars.get(FlowContants.CURE_PROGRAM_USEABLE)));
+
 
 		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 a39ca58..dbd3f3f 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
@@ -56,4 +56,7 @@
 
 	@Schema(description = "鍋忕鍗曞彿")
 	private String deviation;
+
+	@Schema(description = "绋嬪簭鏄惁鍙敤鍒ゅ畾:Y/N")
+	private String cureProgramUseable;
 }
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 c1c0b2f..1819d08 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
@@ -59,6 +59,7 @@
 		addApproveRecord(taskId,comment,variables);
 
 		//鍦ㄧ紪鍒朵换鍔℃椂锛屽垱寤鸿妭鐐癸紙娌℃湁鑺傜偣鍒欏垱寤猴紝鏈夊氨鐩存帴浣跨敤
+		/*
 		if(task.getTaskDefinitionKey().equals("programmingTask") && FlowContants.Y.equals(operateResult)) {
 			FlowProgramProperties progProperties = flowCommonService.getProgramProperties(processInstanceId);
 			ncNodeAutoCreateService.createNodeTreeWithProgram(progProperties);
@@ -73,23 +74,26 @@
 				ncNodeService.updateById(curedProgramPackage);
 			}
 
+		}*/
+		if(task.getTaskDefinitionKey().equals("approveTask") && FlowContants.Y.equals(operateResult)) {
+			//璇曞垏娴佺▼锛屾垨鑰� 鍋忕娴佺▼ 楂樺笀閫氳繃鐨勬椂鍊欏垱寤鸿妭鐐�
+			//createProgramNodes(processInstanceId);
 		}
 		variables.remove(FlowContants.PROCESS_EDITION);//涓嶈鍗囩増浜�
 		//if(!"confirmIsUseableTask".equals(task.getTaskDefinitionKey())){
 		if("confirmIsUseableTask".equals(task.getTaskDefinitionKey())){
 			//宸ュ簭鐗堟涓嶄竴鑷达紝骞朵笖瀹℃牳閫氳繃锛堝彲鐢級鏄紝鎵嶆洿鏂颁负鏂扮殑versionNumber
 			FlowProgramProperties progProperties = flowCommonService.getProgramProperties(processInstanceId);
+			variables.put(FlowContants.CURE_PROGRAM_USEABLE,operateResult);
 
-			if(FlowContants.Y.equals(operateResult)) {
-
-				if(FlowContants.N.equals(progProperties.getIsProcessEditionSame())) {
-					//纭绋嬪簭鍙敤 涓� 宸ュ簭鐗堟涓嶄竴鑷达紝杩涘叆鏍″銆傝繖閲岄渶瑕佸崌绾х▼搴忕殑鐗堟湰鍙�
-					Long curedNodeId = progProperties.getCuredNodeId();
-					ncNodeService.upgradeVersionNumber(curedNodeId);
-				}
-
+			if(FlowContants.Y.equals(operateResult) && 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/flow/task/cure/CureFinishOperateTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java
index 1269842..28d7183 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java
@@ -55,6 +55,7 @@
 			pkgNode.setIsLocked(1);
 			nodeService.updateById(pkgNode);
 		}else {
+			//璇曞垏鐨�
 			pkgNode.setIsCured(1);
 			//璁剧疆杩囨湡鏃ユ湡
 			pkgNode.setExpireDate(calculateExpireDate());
@@ -67,21 +68,13 @@
 
 	/**
 	 * 灏嗚妭鐐瑰拰鍘嗗彶鑺傜偣鎸姩鍒板浐鍖栫殑鍚岀骇鑺傜偣涓�
+	 * @param pkgNode 瑕佹尓鍔ㄧ殑鑺傜偣
 	 * @param historyProgramPackageNodes 绋嬪簭鍖呭悕 鍘嗗彶鑺傜偣
 	 */
 	void moveNodeToCuredTree(NcNode pkgNode,List<NcNode> historyProgramPackageNodes, FlowProgramProperties programProperties) {
 		//鍒涘缓鑺傜偣鍒版満搴婄骇鍒�.(鍥哄寲鏍�)
 		NcNode machineNode = ncNodeAutoCreateService.createNodeTreeToMachine(programProperties);
 
-		//绉诲姩鍒板浐鍖栨爲涓嬬殑鏈哄簥鑺傜偣涓嬪眰
-		//String newParentIds = machineNode.getParentIds()+","+machineNode.getId();
-
-		//鏇存柊鏈哄簥 涓嬪睘鑺傜偣鐨勬暟鎹� 涓烘棫鐗堟湰锛岄攣瀹�(鏈�鏂扮増鏈�=0锛宭ock=1).
-		/*
-		this.nodeService.lambdaUpdate().likeRight(NcNode::getParentIds, newParentIds)
-			.in(NcNode::getNodeType, Arrays.asList(NcNode.TYPE_PROGRAM_PACKAGE,NcNode.TYPE_PROGRAM_FILE))
-			.set(NcNode::getIsLastEdition,0).set(NcNode::getIsLocked,1).update();
-		 */
 		//鏈哄簥涓嬬幇鍦ㄦ病鏈夋枃浠朵簡锛岀▼搴忓寘鍚嶅崌绾т笌鏈哄簥鍚岀骇浜嗭紝鏀逛负鎵惧埌鏈哄簥鍚岀骇绋嬪簭鍖呭悕鏇存柊浜�
 		this.nodeService.lambdaUpdate().likeRight(NcNode::getParentIds, machineNode.getParentIds())
 			.in(NcNode::getNodeType, Arrays.asList(NcNode.TYPE_PROGRAM_PACKAGE,NcNode.TYPE_PROGRAM_FILE))
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 3859a81..3dcb48c 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
@@ -166,15 +166,20 @@
 	 */
 	@Transactional
 	public void dncFileAccept(String ids) throws IOException {
-		List<Long> idList = Func.toLongList(ids);
+		List<Long> acceptIdList = Func.toLongList(ids);
 		//
 		NcProgramExchange exchange;
 		String filekey = getFileKey();
-		String pkgFileName = bladeRedis.get(filekey);
-		log.info("filekey={},鏂囦欢鍚�={}",filekey,pkgFileName);
+		String zipFileName = bladeRedis.get(filekey);
+		log.info("filekey={},鏂囦欢鍚�={}",filekey,zipFileName);
 
 		Map<Long,List<NcNode>> programPackageSubMap = new HashMap<>();
-		List<NcNode> newProgramPackageList = updateNodeDataByDNCBackData(pkgFileName,idList,programPackageSubMap);
+
+		Map<Long,List<FlowProgramFile>> pkgIdFileMap = dealWithBackFile(zipFileName,acceptIdList);
+
+		///List<NcNode> newProgramPackageList = updateNodeDataByDNCBackData(pkgFileName,idList,programPackageSubMap);
+		//updateNodeDataByDNCBackData(pkgFileName,idList,programPackageSubMap);
+		/*
 		log.info("闇�瑕佸惎鍔ㄥ浐鍖栨祦绋嬬殑绋嬪簭鍖呭悕鏁伴噺:{}",newProgramPackageList.size());
 		for(NcNode pkgNode :newProgramPackageList){
 			exchange = new NcProgramExchange();
@@ -183,13 +188,88 @@
 			exchange.setNcNodeId(pkgNode.getId());
 
 			this.save(exchange);
-		}
+		}*/
 		bladeRedis.del(filekey);
-		this.ossTemplate.removeFile(pkgFileName);
-		log.info("鍒犻櫎oss鏂囦欢:{}",pkgFileName);
+		this.ossTemplate.removeFile(zipFileName);
+		log.info("鍒犻櫎oss鏂囦欢:{}",zipFileName);
 
+		//cureFlowService.startCure(newProgramPackageList,programPackageSubMap);
+		cureFlowService.startCureNew(pkgIdFileMap);
 
-		cureFlowService.startCure(newProgramPackageList,programPackageSubMap);
+	}
+
+	private Map<Long, List<FlowProgramFile>> dealWithBackFile(String ossFileName, List<Long> acceptIdList) throws IOException{
+		Map<Long, List<FlowProgramFile>> pkgIdFileMap = new HashMap<>();
+
+		InputStream inputStream = this.ossTemplate.statFileStream(ossFileName);
+		Path tempZipFile = createTempFile(inputStream);
+		List<String> entryNameList = new ArrayList<>();
+
+		ZipEntry entry;
+		try (java.util.zip.ZipFile zipFile = new java.util.zip.ZipFile(tempZipFile.toFile())) {
+			Enumeration<? extends ZipEntry> entries = zipFile.entries();
+			while(entries.hasMoreElements()) {
+				entry = entries.nextElement();
+				entryNameList.add(entry.getName());
+			}
+			log.info("allentrynames:{}",entryNameList);
+
+			List<NcNode> allAcceptPackages =  this.ncNodeService.lambdaQuery().in(NcNode::getId,acceptIdList).list();
+			//鏍规嵁鍐呴儴鏂囦欢锛岃鍙栧拰鍒嗘瀽绋嬪簭鍖呭拰绋嬪簭鏂囦欢鏁版嵁
+			List<String> dirList = entryNameList.stream().filter(s -> s.endsWith("/")).toList();
+			for(String dir : dirList){
+				String programPackageName = StringUtils.removeEnd(dir,"/");
+				Optional<NcNode> optPackageNode = allAcceptPackages.stream().filter(node -> StringUtils.equals(node.getName(),programPackageName)).findFirst();
+
+				if(optPackageNode.isEmpty()){
+					throw new ServiceException("鎵句笉鍒扮▼搴�"+programPackageName);
+				}
+
+				NcNode packageNode = optPackageNode.get();
+				if(packageNode.hasCured()) {
+					throw new ServiceException(programPackageName + "宸茬粡鍥哄寲锛岃鍕块噸澶嶅叆搴撱��");
+				}
+
+				//妫�鏌ユ槸鍚﹀湪瀹℃壒杩囩▼涓�
+				//鏍规嵁鑺傜偣淇℃伅鏌ヨ娴佺▼
+				boolean active = flowCommonService.isProcessInstanceActive(packageNode.getProcessInstanceId());
+				if(active){
+					throw new ServiceException(programPackageName+"姝e湪瀹℃壒涓紝璇峰嬁閲嶅鍏ュ簱銆�");
+				}
+
+				List<FlowProgramFile> flowFiles = new ArrayList<>();
+				//鏌ユ壘鍖呬笅鐨勬枃浠舵暟鎹�,
+				entryNameList.stream().filter(s -> s.startsWith(dir)).forEach(entryName -> {
+					log.info("{}涓嬬殑鏂囦欢锛歿}",dir,entryName);
+
+					if(!entryName.endsWith("/")){
+						//瀹為檯鐨勬枃浠�
+						String fileName = StringUtils.removeStart(entryName,dir);//鍘婚櫎鏂囦欢鍚嶈矾寰勯儴鍒�
+
+						try {
+							FlowProgramFile newFlowFile = new FlowProgramFile();
+							newFlowFile.setProgramName(packageNode.getName());
+							newFlowFile.setProcessInstanceId(null);//鍏堢疆涓虹┖锛屽惎鍔ㄦ祦绋嬪悗璁剧疆璇ュ��
+							newFlowFile.setFileType("program");
+
+							InputStream ins = zipFile.getInputStream(zipFile.getEntry(entryName));
+							BladeFile newOssFile = ossTemplate.putFile("mdm",fileName,ins);
+							newFlowFile.setOssName(newOssFile.getName());
+
+							flowFiles.add(newFlowFile);
+						} catch (IOException e) {
+							throw new RuntimeException(e);
+						}
+					}
+
+				});
+
+				pkgIdFileMap.put(packageNode.getId(),flowFiles);
+			}
+
+		}
+
+		return pkgIdFileMap;
 	}
 
 	/**
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 0aa3b52..dbf595f 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
@@ -107,8 +107,7 @@
 		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());
@@ -120,6 +119,15 @@
 		node.setProductModel(programProperties.getProductModel());
 		node.setFlowProgramFileId(programFile.getId());
 		node.setVersionNumber(1);
+		/*
+		if("program".equals(programFile.getFileType())){
+			node.setParentId(programPkdNode.getId());
+			node.setParentIds(programPkdNode.getParentIds()+","+programPkdNode.getId());
+		}else{
+			//鍏朵粬鏂囦欢锛屽拰绋嬪簭鍖呭悕鍚岀骇骞跺垪
+
+		}*/
+
 		ncNodeService.save(node);
 	}
 
@@ -182,7 +190,6 @@
 				ncNode.setProductModel(programProperties.getProductModel());
 
 				ncNode.setDeviation(programProperties.getDeviation());
-				//ncNode.setMachineMode(programProperties.getMachineMode());
 			}
 
 			ncNode.setIsLastEdition(1);

--
Gitblit v1.9.3