From 3c1c93e559d2dc060cdfc2ab7f0c36378230abab Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期四, 28 八月 2025 14:24:13 +0800
Subject: [PATCH] 机床文件移动/删除 0小时不处理

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.java                      |    6 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/MachineFileQueryVO.java            |    8 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeAutoCreateService.java          |   89 +++++++++---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/mapper/MachineFileChangeHisMapper.xml |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/MachineFileChangeHisVO.java        |   11 -
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java   |   64 ++++++--
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/mapper/MachineFileMapper.java         |    3 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/controller/MachineFileController.java |   41 +++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/SendDirCleanTask.java                            |    5 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java   |    1 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml                       |   13 -
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java                    |    9 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/MachineFileService.java       |   30 ++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java                          |    7 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/mapper/MachineFileMapper.xml          |   25 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java                    |   32 ++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java      |   27 ---
 17 files changed, 277 insertions(+), 96 deletions(-)

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 690f9c3..5f7dad7 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
@@ -80,14 +80,15 @@
 		NcNode curedProgramPackage = null;
 		if(!startVO.isTemporaryFlow() && !startVO.isDeviationFlow()) {
 			//姝e父娴佺▼(闈炰复鏃舵祦绋�) 涓斾笉鏄� 鍋忕鍗�,鎵嶅尮閰嶅浐鍖栫▼搴�
-			curedProgramPackage = ncNodeService.getCuredProgramPackage(programPkgName,startVO.getProcessEdition(), startVO.getMachineCode());
+			curedProgramPackage = ncNodeService.getLastCuredProgramPackageWithoutProcessEdition(programPkgName,startVO.getMachineCode());
 			//璁剧疆鏄惁鏈夊浐鍖栫▼搴忔爣璁�
 			vars.put(FlowContants.HAS_CURED_PROGRAM, curedProgramPackage != null ? FlowContants.Y : FlowContants.N);
 			//宸ュ簭鐗堟鏄惁涓�鑷达紝鏄惁鍦ㄦ湁鏁堟湡鍐�
-			if (curedProgramPackage != null && Func.isBlank(startVO.getDeviation())) {//鍋忕鍗曚紭鍏堬紝濡傛灉鏈夊亸绂诲崟锛岄偅涔堟壘鍒板浐鍖栫▼搴忕殑涔熶笉绠楀浐鍖栦簡
+			if (curedProgramPackage != null) {
 				vars.put(FlowContants.CURED_NODE_ID, curedProgramPackage.getId());
 				vars.put(FlowContants.CURED_LOCKED, curedProgramPackage.hasLocked()?FlowContants.Y:FlowContants.N);
-				vars.put(FlowContants.IS_PROCESS_EDITION_SAME, StringUtils.equals(curedProgramPackage.getProcessEdition(), startVO.getProcessEdition()) ? "Y" : "N");
+				vars.put(FlowContants.IS_PROCESS_EDITION_SAME, StringUtils.equals(curedProgramPackage.getProcessEdition(), startVO.getProcessEdition()) ? FlowContants.Y : FlowContants.N);
+				vars.put("curedProcessEdition", curedProgramPackage.getProcessEdition());
 				vars.put(FlowContants.VALIDITY_PERIOD, curedProgramPackage.withinValidityPeriod() ? FlowContants.Y : FlowContants.N);
 			} else {
 				vars.put(FlowContants.IS_PROCESS_EDITION_SAME, FlowContants.Y);
@@ -95,7 +96,7 @@
 			}
 
 		}else{
-			//涓存椂娴佺▼/楠椾綘浣嗭紝涓嶅尮閰嶅浐鍖栫▼搴�
+			//涓存椂娴佺▼/鍋忕鍗曪紝涓嶅尮閰嶅浐鍖栫▼搴�
 			vars.put(FlowContants.HAS_CURED_PROGRAM,FlowContants.N);
 		}
 		String myProcessName = "璇曞垏涓嬪彂娴佺▼";
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 f34acb0..9db87c3 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
@@ -110,7 +110,6 @@
 
 		//鏂板缓涓�涓妭鐐癸紝浣滀负鍥哄寲鑺傜偣锛岃�佽妭鐐逛繚鐣欎笉鍔�,缃负鑰佺増鏈�
 
-
 		//鏈哄簥涓嬬幇鍦ㄦ病鏈夋枃浠朵簡锛岀▼搴忓寘鍚嶅崌绾т笌鏈哄簥鍚岀骇浜嗭紝鏀逛负鎵惧埌鏈哄簥鍚岀骇绋嬪簭鍖呭悕鏇存柊浜�
 		//TODO 杩欎釜parentIds鏄笉鏄笉澶燂紵锛屼笉澶燂紝涓�涓満搴婁笅澶氫釜绋嬪簭鍖呯殑鎯呭喌涓嶈鍚э紝浣嗘槸鎸夌収鏍戯紝澶氫釜绋嬪簭鍖呬笉澶幇瀹�
 		this.nodeService.lambdaUpdate().likeRight(NcNode::getParentIds, machineNode.getParentIds())
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java
index 64e1da3..e74df92 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java
@@ -1,9 +1,7 @@
 package org.springblade.mdm.flow.excution.dispatch;
 
 import lombok.extern.slf4j.Slf4j;
-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;
 import org.springblade.mdm.flow.service.FlowProgramFileService;
@@ -43,10 +41,7 @@
 	public void handleData(FlowProgramProperties props) {
 		// 鎵ц涓氬姟閫昏緫
 		String instId = props.getProcessInstanceId();
-
-		String programPkgName = NcNodeService.genProgramName(props.getDrawingNo(),props.getProcessNo());
-		//NcNode packageNode =createProgramNodes(props);
-		NcNode packageNode;// = ncNodeAutoCreateService.createNodeTreeWithProgram(props);
+		NcNode packageNode;
 		if(FlowContants.Y.equals(props.getHasCuredProgram())){
 			//鏈夊浐鍖�
 			packageNode = ncNodeService.getById(props.getCuredNodeId());
@@ -58,18 +53,60 @@
 				ncNodeService.updateById(packageNode);
 
 				Integer newVersion = packageNode.genNewVersionNumber();
-				packageNode = ncNodeAutoCreateService.createNodeTreeWithProgram(props);
-				packageNode.setVersionNumber(newVersion);
-				ncNodeService.updateById(packageNode);
+				packageNode = ncNodeAutoCreateService.createNodeTreeWithProgram(props,newVersion);
+			}else{
+				//鍙敤锛屽崌鐗堬紙淇敼鍏跺伐搴忕増鏈級锛屽師鏉ョ殑鑺傜偣娓呴櫎
+				moveToNewProcessEdition(packageNode,props);
 			}
 
 		}else{
-			packageNode = ncNodeAutoCreateService.createNodeTreeWithProgram(props);
+			packageNode = ncNodeAutoCreateService.createNodeTreeWithProgram(props,1);
 		}
 
 		addApproveTable(packageNode,props);
 		//updateApproveRecordNodeId(instId, packageNode.getId());
 		log.info("鏅�氭祦绋嬪凡瀹屾垚in DispatchFinishListener");
+	}
+
+	private void moveToNewProcessEdition(NcNode packageNode, FlowProgramProperties props) {
+		ncNodeService.deleteMachineNodeByParentId(packageNode.getParentId());
+
+		FlowProgramProperties tempProps = new FlowProgramProperties();
+		BeanUtils.copyProperties(props,tempProps);
+		tempProps.setProcessDefinitionKey(FlowContants.CURE_PROCESS_KEY);//涓存椂淇敼鍏朵负鍥哄寲,鍦ㄥ浐鍖栦笅鍒涘缓鑺傜偣
+		NcNode machineNode = ncNodeAutoCreateService.createNodeTreeToMachine(tempProps);
+
+		//绉诲姩鍘嗗彶鑺傜偣鍒版柊鐨勭増娆¤妭鐐逛笅
+		List<NcNode> packageHisNodes = ncNodeService.getNodeHistory(packageNode);//璇ュ寘鐨勫巻鍙茶妭鐐瑰垪琛�
+		for(NcNode hisPackageNode : packageHisNodes){
+			hisPackageNode.setParentId(machineNode.getParentId());
+			hisPackageNode.setParentIds(machineNode.getParentIds());
+
+			List<NcNode> oriProgramNodes = ncNodeService.lambdaQuery().eq(NcNode::getParentId,hisPackageNode.getId()).list();
+
+			for(NcNode oldProgramNode : oriProgramNodes){
+				oldProgramNode.setParentIds(hisPackageNode.getParentIds()+","+hisPackageNode.getId());
+			}
+			ncNodeService.updateBatchById(oriProgramNodes);
+		}
+		ncNodeService.updateBatchById(packageHisNodes);
+
+		//绉诲姩绋嬪簭鍖呭悕鑺傜偣
+		packageNode.setProcessEdition(tempProps.getProcessEdition());
+		packageNode.setParentId(machineNode.getParentId());
+		packageNode.setParentIds(machineNode.getParentIds());
+		this.ncNodeService.updateById(packageNode);
+
+		//绉诲姩绋嬪簭鑺傜偣
+		List<NcNode> programNodes = ncNodeService.getProgramFilesByPackageId(packageNode.getId());
+		for(NcNode programNode : programNodes){
+			programNode.setParentIds(packageNode.getParentIds()+","+packageNode.getId());
+			programNode.setProcessEdition(tempProps.getProcessEdition());//淇敼宸ュ簭鐗堟
+			programNode.setVersionNumber(packageNode.getVersionNumber());
+		}
+		ncNodeService.updateBatchById(programNodes);
+
+
 	}
 
 
@@ -90,11 +127,4 @@
 
 	}
 
-	/*
-	void updateApproveRecordNodeId(String processInstanceId,Long nodeId){
-		//鏇存柊瀹℃壒璁板綍鐨刵cNodeId
-		approveRecordService.lambdaUpdate()
-			.eq(ApproveRecord::getProcessInstanceId, processInstanceId)
-			.set(ApproveRecord::getNcNodeId,nodeId).update();
-	}*/
 }
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 da3e7e0..6d00bcc 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
@@ -58,23 +58,6 @@
 		}
 		addApproveRecord(taskId,comment,variables);
 
-		//鍦ㄧ紪鍒朵换鍔℃椂锛屽垱寤鸿妭鐐癸紙娌℃湁鑺傜偣鍒欏垱寤猴紝鏈夊氨鐩存帴浣跨敤
-		/*
-		if(task.getTaskDefinitionKey().equals("programmingTask") && FlowContants.Y.equals(operateResult)) {
-			FlowProgramProperties progProperties = flowCommonService.getProgramProperties(processInstanceId);
-			ncNodeAutoCreateService.createNodeTreeWithProgram(progProperties);
-			//鍘熸潵鐗堟鐨勭▼搴忥紝姝ゆ椂搴旇娓呴櫎锛屾槸涓嶆槸瑕佹尓杩囨潵鍛紵鐗堟宸茬粡涓嶅浜�
-			//TODO 鑰佽妭鐐规竻闄ゅ悧
-
-			//璧板埌缂栧埗鑺傜偣锛屽鏋滄槸鏈夊浐鍖栫▼搴忎笖閫氳繃浜嗭紝璇存槑闇�瑕佸崌鐗堬紙閲嶆柊缂栧啓锛夛紝灏嗗浐鍖栫殑鍘熸潵鐨勭▼搴忚缃甽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);
-			}
-
-		}*/
 		if(task.getTaskDefinitionKey().equals("approveTask") && FlowContants.Y.equals(operateResult)) {
 			//璇曞垏娴佺▼锛屾垨鑰� 鍋忕娴佺▼ 楂樺笀閫氳繃鐨勬椂鍊欏垱寤鸿妭鐐�
 			//createProgramNodes(processInstanceId);
@@ -83,14 +66,14 @@
 		//if(!"confirmIsUseableTask".equals(task.getTaskDefinitionKey())){
 		if("confirmIsUseableTask".equals(task.getTaskDefinitionKey())){
 			//宸ュ簭鐗堟涓嶄竴鑷达紝骞朵笖瀹℃牳閫氳繃锛堝彲鐢級鏄紝鎵嶆洿鏂颁负鏂扮殑versionNumber
-			FlowProgramProperties progProperties = flowCommonService.getProgramProperties(processInstanceId);
+			//FlowProgramProperties progProperties = flowCommonService.getProgramProperties(processInstanceId);
 			variables.put(FlowContants.CURE_PROGRAM_USEABLE,operateResult);
 
-			if(FlowContants.Y.equals(operateResult) && FlowContants.N.equals(progProperties.getIsProcessEditionSame())) {
+			//if(FlowContants.Y.equals(operateResult) && FlowContants.N.equals(progProperties.getIsProcessEditionSame())) {
 				//纭绋嬪簭鍙敤 涓� 宸ュ簭鐗堟涓嶄竴鑷达紝杩涘叆鏍″銆傝繖閲岄渶瑕佸崌绾х▼搴忕殑鐗堟湰鍙�
-				Long curedNodeId = progProperties.getCuredNodeId();
-				ncNodeService.upgradeVersionNumber(curedNodeId);
-			}
+			//	Long curedNodeId = progProperties.getCuredNodeId();
+			//	ncNodeService.upgradeVersionNumber(curedNodeId);
+			//}
 		}
 		taskService.complete(taskId, variables);
 	}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/controller/MachineFileController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/controller/MachineFileController.java
index 3aec2b2..5501d41 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/controller/MachineFileController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/controller/MachineFileController.java
@@ -10,18 +10,25 @@
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
+import org.springblade.mdm.basesetting.machine.MachineService;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.basesetting.producedivision.entity.MdmDept;
+import org.springblade.mdm.basesetting.producedivision.service.MdmDeptService;
 import org.springblade.mdm.gkw.programnode.entity.MachineFile;
 import org.springblade.mdm.gkw.programnode.service.MachineFileChangeHisService;
 import org.springblade.mdm.gkw.programnode.service.MachineFileService;
 import org.springblade.mdm.gkw.programnode.vo.MachineFileChangeHisQueryVO;
 import org.springblade.mdm.gkw.programnode.vo.MachineFileChangeHisVO;
 import org.springblade.mdm.gkw.programnode.vo.MachineFileQueryVO;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 鍏紑缃戠▼搴忚妭鐐�
@@ -31,23 +38,47 @@
 @NonDS
 @RestController
 @RequestMapping("/gkw/node")
-@AllArgsConstructor
 @Tag(name = "宸ユ帶缃戠▼搴忚妭鐐�", description = "宸ユ帶缃戠▼搴忚妭鐐�")
 @Slf4j
 public class MachineFileController {
-	private final MachineFileService machineFileService;
-	private final MachineFileChangeHisService machineFileChangeHisService;
+	@Autowired
+	private MachineFileService machineFileService;
+	@Autowired
+	private MachineFileChangeHisService machineFileChangeHisService;
+	@Autowired
+	private MdmDeptService mdmDeptService;
+	@Autowired
+	private MachineService machineService;
 
 	@GetMapping("/file-page")
 	@Operation(summary = "宸ユ帶缃戠洰褰曟枃浠跺垪琛�", description = "宸ユ帶缃戠洰褰曟枃浠跺垪琛�")
 	public R<IPage<MachineFile>> page(MachineFileQueryVO query) {
-
+		/*
 		IPage<MachineFile> pageData = machineFileService.lambdaQuery()
 			.eq(MachineFile::getMachineCode,query.getMachineCode())
 			.eq(MachineFile::getDirType,query.getDirType())
 			.ne(MachineFile::getStatus,MachineFile.STATUS_REMOVED).like(StringUtils.isNotBlank(query.getName()),MachineFile::getName,query.getName())
 			.page(Condition.getPage(query));
-		return R.data(pageData);
+		*/
+		List<Long> deptIds = new ArrayList<>();
+		if("workshop".equals(query.getNodeType()) || "seg".equals(query.getNodeType())) {
+			//鑺傜偣涓鸿溅闂淬�佸伐娈�
+			MdmDept dept = mdmDeptService.getById(query.getNodeId());
+
+			String idStr = dept.getAncestors()+","+dept.getId();
+			List<MdmDept> depts = mdmDeptService.lambdaQuery().likeRight(MdmDept::getParentId, query.getNodeId()).list();
+			deptIds.addAll(depts.stream().map(MdmDept::getId).toList());
+			deptIds.add(dept.getId());
+			//+鏈溅闂�
+			//Func.toStrList(",",idStr)
+			query.setDeptIds(deptIds);
+		}else if("machine".equals(query.getNodeType())){
+			Machine machine = machineService.getById(query.getNodeId());
+			query.setMachineCode(machine.getCode());
+		}else if("dir".equals(query.getNodeType())){
+			query.setMachineCode(query.getMachineCode());
+		}
+		return R.data(machineFileService.pageQuery(query));
 	}
 
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/mapper/MachineFileChangeHisMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/mapper/MachineFileChangeHisMapper.xml
index e1de899..62d4844 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/mapper/MachineFileChangeHisMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/mapper/MachineFileChangeHisMapper.xml
@@ -17,7 +17,7 @@
             h.is_deleted= 0 and h.machine_file_id=#{query.machineFileId}
 
             <if test="query.name!=null and query.name!=''">
-                and u.name like #{query.name,jdbcType=VARCHAR}
+                and u.name like CONCAT('%', #{query.name,jdbcType=VARCHAR},'%')
             </if>
             <if test="query.createTimeBegin!=null">
                 and h.create_time&gt;=#{query.createTimeBegin}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/mapper/MachineFileMapper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/mapper/MachineFileMapper.java
index 5c71a76..3d0438b 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/mapper/MachineFileMapper.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/mapper/MachineFileMapper.java
@@ -5,6 +5,7 @@
 import org.springblade.core.mp.mapper.BladeMapper;
 import org.springblade.mdm.gkw.programnode.entity.MachineFile;
 import org.springblade.mdm.gkw.programnode.entity.ProgramNode;
+import org.springblade.mdm.gkw.programnode.vo.MachineFileQueryVO;
 import org.springblade.mdm.gkw.programnode.vo.ProgramNodeVO;
 import org.springblade.mdm.machineback.vo.MachineBackFileHandleQueryVO;
 import org.springblade.mdm.machineback.vo.MachineBackFileQueryVO;
@@ -13,7 +14,7 @@
 import java.util.List;
 
 public interface MachineFileMapper extends BladeMapper<MachineFile> {
-
+	IPage<MachineFile> pageQuery(IPage<MachineFile> page, @Param("query") MachineFileQueryVO queryVO);
 	/**
 	 * 鏈哄簥鍥炰紶鏂囦欢鏌ヨ
 	 * @param page 鍒嗛〉鍙傛暟
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/mapper/MachineFileMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/mapper/MachineFileMapper.xml
index 66d209d..166ef21 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/mapper/MachineFileMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/mapper/MachineFileMapper.xml
@@ -60,4 +60,29 @@
     </select>
 
 
+    <select id="pageQuery" resultType="org.springblade.mdm.gkw.programnode.entity.MachineFile">
+        select f.id,f.name,f.machine_code,f.file_create_time arrived_time,f.md5,f.file_size,f.create_time,f.update_time
+        from mdm_machine_file f join mdm_machine m on f.machine_code=m.code and m.is_deleted=0
+        <where>
+            f.is_deleted=0
+
+            <if test="query.name!=null and query.name!=''">
+                and f.name like CONCAT('%', #{query.name,jdbcType=VARCHAR},'%')
+            </if>
+
+            <if test="query.machineCode!=null and query.machineCode!=''">
+                and   f.machine_code= #{query.machineCode,jdbcType=VARCHAR}
+            </if>
+            <if test="query.deptIds!=null and query.deptIds.size()&gt;0">
+                and  m.owner_dept in
+                <foreach item="item" collection="query.deptIds" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="query.dirType!=null and query.dirType!=''">
+                and  f.dir_type= #{query.dirType,jdbcType=VARCHAR}
+            </if>
+        </where>
+        order by f.file_create_time desc
+    </select>
 </mapper>
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/MachineFileService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/MachineFileService.java
index 33915b3..c64c04a 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/MachineFileService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/MachineFileService.java
@@ -9,10 +9,15 @@
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BizServiceImpl;
 import org.springblade.core.mp.support.Condition;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.model.BladeFile;
 import org.springblade.mdm.basesetting.machine.MachineService;
 import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.basesetting.producedivision.entity.MdmDept;
 import org.springblade.mdm.gkw.programnode.entity.MachineFile;
+import org.springblade.mdm.gkw.programnode.entity.MachineFileChangeHis;
 import org.springblade.mdm.gkw.programnode.mapper.MachineFileMapper;
+import org.springblade.mdm.gkw.programnode.vo.MachineFileQueryVO;
 import org.springblade.mdm.machineback.vo.MachineBackFileHandleQueryVO;
 import org.springblade.mdm.machineback.vo.MachineBackFileQueryVO;
 import org.springblade.mdm.machineback.vo.MachineBackFileVO;
@@ -26,6 +31,8 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 鏈哄簥鏂囦欢
@@ -37,6 +44,8 @@
 @AllArgsConstructor
 public class MachineFileService extends BizServiceImpl<MachineFileMapper, MachineFile> {
 	private final MachineService machineService;
+	private final MachineFileChangeHisService machineFileChangeHisService;
+	private final OssTemplate ossTemplate;
 	/**
 	 * 妫�娴嬫枃浠舵槸鍚﹀瓨鍦�
 	 * @param name 鏂囦欢鍚�
@@ -106,10 +115,22 @@
 
 		String filePathStr = getBasePath(machine,machineFile.getDirType())+ File.separator+machineFile.getName();
 		Path filePath = Paths.get(filePathStr);
+
+		BladeFile bfile;
+		try (InputStream inputStream = Files.newInputStream(filePath)) {
+			bfile = ossTemplate.putFile(machineFile.getName(), inputStream);
+		}
 		String charsetName = "UTF-8";
 		try (InputStream inputStream = Files.newInputStream(filePath)) {
 			// 浣跨敤杈撳叆娴佽鍙栨枃浠跺唴瀹�
 			charsetName = FileContentUtil.detectFromInputStream(inputStream);
+
+			//淇濆瓨鍘嗗彶璁板綍
+			MachineFileChangeHis his = new MachineFileChangeHis();
+			his.setMachineFileId(id);
+			his.setOssName(bfile.getName());
+
+			this.machineFileChangeHisService.save(his);
 		} catch (IOException e) {
 			log.error("璇诲彇鏂囦欢缂栫爜澶辫触",e);
 			throw new ServiceException("鑾峰彇鏂囦欢缂栫爜澶辫触");
@@ -153,4 +174,13 @@
 		IPage<MachineBackFileVO> page = this.getBaseMapper().handlePageQuery(Condition.getPage(query),query);
 		return page;
 	}
+
+	/**
+	 * 鏈哄簥鏂囦欢鍒嗛〉鏌ヨ
+	 * @param query
+	 * @return
+	 */
+	public IPage<MachineFile> pageQuery(MachineFileQueryVO query) {
+		return baseMapper.pageQuery(Condition.getPage(query),query);
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/MachineFileChangeHisVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/MachineFileChangeHisVO.java
index 573a5b3..4769574 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/MachineFileChangeHisVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/MachineFileChangeHisVO.java
@@ -4,19 +4,16 @@
 import lombok.Getter;
 import lombok.Setter;
 import org.springblade.core.mp.support.Query;
+import org.springblade.mdm.commons.vo.BaseVO;
 
 /**
  * 鍒嗛〉鎷嗙嚎鍛�
  */
 
-@Schema(description = "鏈哄簥鏂囦欢鏌ヨ瀵硅薄")
+@Schema(description = "鏈哄簥鏂囦欢鍙樻洿鍘嗗彶瀵硅薄")
 @Setter
 @Getter
-public class MachineFileChangeHisVO extends Query {
-	@Schema(description = "鏂囦欢鍚嶆垚")
+public class MachineFileChangeHisVO extends BaseVO {
+	@Schema(description = "鐢ㄦ埛濮撳悕")
 	private String name;
-	@Schema(description = "鐩綍绫诲瀷")
-	private String dirType;
-	@Schema(description = "鏈哄簥缂栫爜")
-	private String machineCode;
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/MachineFileQueryVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/MachineFileQueryVO.java
index f33b1a7..9adcd9b 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/MachineFileQueryVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/MachineFileQueryVO.java
@@ -5,6 +5,8 @@
 import lombok.Setter;
 import org.springblade.core.mp.support.Query;
 
+import java.util.List;
+
 /**
  * 鍒嗛〉鎷嗙嚎鍛�
  */
@@ -19,4 +21,10 @@
 	private String dirType;
 	@Schema(description = "鏈哄簥缂栫爜")
 	private String machineCode;
+	@Schema(description = "鑺傜偣绫诲瀷")
+	private String nodeType;
+	@Schema(description = "鑺傜偣id")
+	private Long nodeId;
+	@Schema(description = "閮ㄩ棬id闆嗗悎")
+	private List<Long> deptIds;
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.java
index 7c8e5fc..d2af8b7 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.java
@@ -50,4 +50,10 @@
 	 * @param nodeId
 	 */
     void deleteSubNodes(Long nodeId);
+
+	/**
+	 * 绉婚櫎鏌愯妭鐐逛笅鐨勫姞宸ユ満搴婅妭鐐�
+	 * @param parentId 绯绘浣唅d
+	 */
+    void deleteMachineNodeByParentId(Long parentId);
 }
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 bb74899..f82192c 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
@@ -30,15 +30,10 @@
     <delete id="deleteSubNodes">
         delete from mdm_nc_node where parent_id=#{nodeId}
     </delete>
-    <!--
-    <select id="getCuredNcProgram" resultMap="BaseResultMap">
-        select <include refid="prog_all_columns"/> from mdm_nc_program
-        where is_deleted=0 and is_cured=1 and drawing_no=#{drawingNo} and is_last_edition=1
-        and machine_code in (select code from mdm_machine where machine_group_code=#{machineGroupCode})
-        order by create_time desc
-        limit 1
-    </select>
-    -->
+    <delete id="deleteMachineNodeByParentId">
+        delete from mdm_nc_node where parent_id=#{parentId} and node_type='50'
+    </delete>
+
     <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.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.product_model,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">
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 076f094..d80b701 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
@@ -68,17 +68,58 @@
 			throw new ServiceException("娴佺▼瀹氫箟涓嶅湪鑼冨洿鍐�");
 		}
 		//鍒涘缓浜у搧鍨嬪彿鑺傜偣
-		NcNode productModelNode = createNodeIfNotExists(programProperties.getProductModel(),NcNode.TYPE_PRODUCT_MODEL, root,programProperties);
+		NcNode productModelNode = createNodeIfNotExists(programProperties.getProductModel(),NcNode.TYPE_PRODUCT_MODEL, root,programProperties,null);
 		//闆剁粍浠跺彿鑺傜偣
-		NcNode drawingNoNode = createNodeIfNotExists(programProperties.getDrawingNo(),NcNode.TYPE_DRAWING_NO, productModelNode,programProperties);
+		NcNode drawingNoNode = createNodeIfNotExists(programProperties.getDrawingNo(),NcNode.TYPE_DRAWING_NO, productModelNode,programProperties,null);
 		//宸ヨ壓鐗堟鑺傜偣
 		//NcNode craftEditionNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_CRAFT_EDITION, drawingNoNode,programProperties);
 		//宸ュ簭鍙疯妭
-		NcNode processNoNode = createNodeIfNotExists(programProperties.getProcessNo(),NcNode.TYPE_PROCESS_NO, drawingNoNode,programProperties);
+		NcNode processNoNode = createNodeIfNotExists(programProperties.getProcessNo(),NcNode.TYPE_PROCESS_NO, drawingNoNode,programProperties,null);
 		//宸ュ簭鐗堟鑺傜偣
-		NcNode processEditionNode = createNodeIfNotExists(programProperties.getProcessEdition(),NcNode.TYPE_PROCESS_EDITION, processNoNode,programProperties);
+		NcNode processEditionNode = createNodeIfNotExists(programProperties.getProcessEdition(),NcNode.TYPE_PROCESS_EDITION, processNoNode,programProperties,null);
 		//鍔犲伐鏈哄簥鑺傜偣
-		return createNodeIfNotExists(programProperties.getMachineCode(),NcNode.TYPE_MACHINE_CODE, processEditionNode,programProperties);
+		return createNodeIfNotExists(programProperties.getMachineCode(),NcNode.TYPE_MACHINE_CODE, processEditionNode,programProperties,null);
+	}
+
+	@Transactional
+	public NcNode createNodeTreeToProcessEdition(FlowProgramProperties programProperties) {
+		NcNode root;
+		if(programProperties.getProcessDefinitionKey().equals(FlowContants.TRY_PROCESS_KEY)){
+			if(Func.isEmpty(programProperties.getDeviation()) ||
+				(FlowContants.Y.equals(programProperties.getHasCuredProgram()) &&  FlowContants.N.equals(programProperties.getCureProgramUseable()))){
+				//鏅�氳瘯鍒囷紝鎴栬�呮湁鍥哄寲涓嶅彲鐢紝寤虹珛璇曞垏鑺傜偣
+				//璇曞垏鏍硅妭鐐�
+				root = rootNodeByName(TRY_NAME);
+				if (root == null) {
+					root = createTryNode();
+				}
+			}else{
+				//鏈夊亸绂�
+				root = rootNodeByName(DEVIATION_NAME);
+				if(root == null){
+					root = createDeviationNode();
+				}
+			}
+		}else if(programProperties.getProcessDefinitionKey().equals(FlowContants.CURE_PROCESS_KEY)){
+			root = rootNodeByName(CURE_NAME);
+			if(root == null){
+				root = createCureNode();
+			}
+		}else{
+			throw new ServiceException("娴佺▼瀹氫箟涓嶅湪鑼冨洿鍐�");
+		}
+		//鍒涘缓浜у搧鍨嬪彿鑺傜偣
+		NcNode productModelNode = createNodeIfNotExists(programProperties.getProductModel(),NcNode.TYPE_PRODUCT_MODEL, root,programProperties,null);
+		//闆剁粍浠跺彿鑺傜偣
+		NcNode drawingNoNode = createNodeIfNotExists(programProperties.getDrawingNo(),NcNode.TYPE_DRAWING_NO, productModelNode,programProperties,null);
+		//宸ヨ壓鐗堟鑺傜偣
+		//NcNode craftEditionNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_CRAFT_EDITION, drawingNoNode,programProperties);
+		//宸ュ簭鍙疯妭
+		NcNode processNoNode = createNodeIfNotExists(programProperties.getProcessNo(),NcNode.TYPE_PROCESS_NO, drawingNoNode,programProperties,null);
+		//宸ュ簭鐗堟鑺傜偣
+		NcNode processEditionNode = createNodeIfNotExists(programProperties.getProcessEdition(),NcNode.TYPE_PROCESS_EDITION, processNoNode,programProperties,null);
+		//鍔犲伐鏈哄簥鑺傜偣
+		return createNodeIfNotExists(programProperties.getMachineCode(),NcNode.TYPE_MACHINE_CODE, processEditionNode,programProperties,null);
 	}
 	/**
 	 * 鏍规嵁娴佺▼淇℃伅锛岃嚜鍔ㄥ垱寤哄悇涓妭鐐�,鍖呮嫭绋嬪簭鑺傜偣
@@ -86,15 +127,15 @@
 	 * @return 绋嬪簭鍖呰妭鐐瑰疄渚�
 	 */
 	@Transactional
-	public NcNode createNodeTreeWithProgram(FlowProgramProperties programProperties) {
+	public NcNode createNodeTreeWithProgram(FlowProgramProperties programProperties,Integer versionNumber) {
 		//,int rootNodeCatgory = 1:璇曞垏锛�2鍥哄寲锛�3鍋忕
-		NcNode programPkdNode = createTreeToPackage(programProperties);
+		NcNode programPkdNode = createTreeToPackage(programProperties,versionNumber);
 		//鍒犻櫎涔嬪墠鍒涘缓杩囩殑绋嬪簭鏂囦欢鑺傜偣(鍥犱负閲嶅鍦ㄧ紪鍒惰妭鐐瑰鎵�)锛岄伩鍏嶉噸澶嶆暟鎹�
 		ncNodeService.deleteSubNodes(programPkdNode.getId());
 
 		List<FlowProgramFile> programFiles = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, programProperties.getProcessInstanceId()).list();
 		for (FlowProgramFile programFile : programFiles) {
-			createProgramFileNode(programFile, programPkdNode, programProperties);//鎵�鏈夋枃浠跺寘鎷▼搴忓拰鍏朵粬锛岄兘闇�瑕佸缓绔嬭妭鐐�
+			createProgramFileNode(programFile, programPkdNode,versionNumber);//鎵�鏈夋枃浠跺寘鎷▼搴忓拰鍏朵粬锛岄兘闇�瑕佸缓绔嬭妭鐐�
 		}
 
 		return programPkdNode;
@@ -104,9 +145,9 @@
 	 * 寤虹珛绋嬪簭鏂囦欢鑺傜偣
 	 * @param programFile 娴佺▼鏂囦欢
 	 * @param programPkdNode 绋嬪簭鍖呭悕 鑺傜偣锛岀▼搴忚妭鐐圭殑 涓婄骇
-	 * @param programProperties 娴佺▼鍙戣捣鐨勭▼搴忕殑灞炴��
+	 * @param versionNumber 鐗堟湰鍙�
 	 */
-	private void createProgramFileNode(FlowProgramFile programFile, NcNode programPkdNode, FlowProgramProperties programProperties) {
+	private void createProgramFileNode(FlowProgramFile programFile, NcNode programPkdNode, Integer versionNumber) {
 		//姝ゅ搴旈伩鍏嶉噸澶嶅垱寤�
 
 		NcNode node = new NcNode();
@@ -117,19 +158,13 @@
 		node.setName(programFile.getName());//鏂囦欢鍚嶏紝
 
 		node.setIsLastEdition(1);
-		/*
-		node.setDrawingNo(programPkdNode.getDrawingNo());
-		node.setDrawingNoEdition(programProperties.getDrawingNoEdition());
-		node.setCraftEdition(programProperties.getCraftEdition());
-		node.setProcessName(programProperties.getProcessName());
-		node.setProcessNo(programProperties.getProcessNo());
-		node.setProcessEdition(programProperties.getProcessEdition());
-		node.setMachineCode(programProperties.getMachineCode());
-		node.setProductModel(programProperties.getProductModel());
 
-		 */
 		node.setFlowProgramFileId(programFile.getId());
-		node.setVersionNumber(1);
+		if(versionNumber == null){
+			node.setVersionNumber(1);
+		}else {
+			node.setVersionNumber(versionNumber);
+		}
 		node.setParentId(programPkdNode.getId());
 		node.setParentIds(programPkdNode.getParentIds()+","+programPkdNode.getId());
 
@@ -143,7 +178,7 @@
 	 * @return 绋嬪簭鍖呭悕鑺傜偣锛堟渶鏈骇锛�
 	 */
 	@Transactional
-	public NcNode createTreeToPackage(FlowProgramProperties programProperties) {
+	public NcNode createTreeToPackage(FlowProgramProperties programProperties,Integer versionNumber) {
 		NcNode machineCodeNode = createNodeTreeToMachine(programProperties);
 		NcNode processEditionNode = this.ncNodeService.getById(machineCodeNode.getParentId());
 		//鑾峰彇宸ュ簭鐗堟涓嬪叾浠栨満搴婂悕锛屽瓨鍦ㄥ垯鍒犻櫎
@@ -155,7 +190,7 @@
 		//鑾峰彇
 		//鍔犲伐鏈哄簥鍜岀▼搴忓寘鍚嶅湪鍚屼竴绾ц妭鐐�,鍚屽湪宸ュ簭鐗堟涓嬬骇
 		String programPkgName = NcNodeService.genProgramName(programProperties.getDrawingNo(),programProperties.getProcessNo());
-		return createNodeIfNotExists(programPkgName ,NcNode.TYPE_PROGRAM_PACKAGE, processEditionNode,programProperties);
+		return createNodeIfNotExists(programPkgName ,NcNode.TYPE_PROGRAM_PACKAGE, processEditionNode,programProperties,versionNumber);
 
 	}
 
@@ -167,7 +202,7 @@
 	 * @param programProperties 娴佺▼绋嬪簭灞炴��
 	 * @return 鍒涘缓鎴栧凡瀛樺湪鐨勮妭鐐规垨
 	 */
-	NcNode createNodeIfNotExists(String name,String nodeType,NcNode parentNode,FlowProgramProperties programProperties) {
+	NcNode createNodeIfNotExists(String name,String nodeType,NcNode parentNode,FlowProgramProperties programProperties,Integer versionNumber) {
 		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()){
@@ -178,7 +213,11 @@
 			ncNode.setParentId(parentNode.getId());
 			ncNode.setParentIds(parentNode.getParentIds() + "," + parentNode.getId());
 			ncNode.setNodeType(nodeType);
-			ncNode.setVersionNumber(1);
+			if(versionNumber == null){
+				ncNode.setVersionNumber(1);
+			}else{
+				ncNode.setVersionNumber(versionNumber);
+			}
 
 			//绋嬪簭鍖呰妭鐐瑰拰绋嬪簭鏂囦欢鑺傜偣鏁版嵁
 			if(NcNode.TYPE_PROGRAM_PACKAGE.equals(nodeType) || NcNode.TYPE_PROGRAM_FILE.equals(nodeType)){
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 62d36d6..2a99ad7 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
@@ -292,6 +292,29 @@
 	}
 
 	/**
+	 * 鑾峰彇鏈�鏂扮殑鍥哄寲绋嬪簭锛屼笉鐢ㄥ伐搴忕増娆″尮閰�
+	 * @param programPkgName
+	 * @param machineCode
+	 * @return
+	 */
+	public NcNode getLastCuredProgramPackageWithoutProcessEdition(String programPkgName,String machineCode) {
+		Machine machine = machineService.getByCode(machineCode);
+		List<Machine> sameGroupMachines = machineService.lambdaQuery().eq(Machine::getMachineGroupCode,machine.getMachineGroupCode()).list();
+		List<String> machineCodesInGroup = sameGroupMachines.stream().map(Machine::getCode).toList();
+		List<NcNode> nodes = lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE)
+			.eq(NcNode::getName, programPkgName)
+			.likeRight(NcNode::getParentIds,"0,2,").eq(NcNode::getIsCured,1)
+			.in(!machineCodesInGroup.isEmpty(),NcNode::getMachineCode,machineCodesInGroup)
+			.eq(NcNode::getIsLastEdition,1).orderByDesc(NcNode::getCreateTime).list();
+
+		if(nodes.isEmpty()){
+			return null;
+		}else {
+			return nodes.get(0);
+		}
+	}
+
+	/**
 	 * 鑾峰彇鏈�鏂扮増鏈殑 鍋忕鑺傜偣
 	 * @param programPkgName 绋嬪簭鍖呭悕
 	 * @return 鍋忕鐨勭▼搴忚妭鐐�
@@ -337,7 +360,6 @@
 		return this.lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_FILE)
 			.eq(NcNode::getParentId,packageNodeId).eq(NcNode::getIsLastEdition,1).list();
 	}
-
 	/**
 	 * 鍗囩骇鐗堟湰鍙凤紙+1锛�
 	 * @param nodeId 鑺傜偣id
@@ -384,4 +406,12 @@
 			.le(NcNode::getCreateTime,programPkgNode.getCreateTime())  //鏃堕棿灏忎簬绛変簬褰撳墠鑺傜偣
 			.count();
     }
+
+	/**
+	 * 鏍规嵁涓婄骇鑺傜偣id锛岀Щ鍔ㄤ笅闈㈢殑鍔犲伐鏈哄簥鑺傜偣
+	 * @param parentId 涓婄骇鑺傜偣id
+	 */
+	public void deleteMachineNodeByParentId(Long parentId) {
+		baseMapper.deleteMachineNodeByParentId(parentId);
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java
index 1291519..d66d4ea 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java
@@ -34,9 +34,9 @@
 	@Autowired
 	private ParamService paramService;
 	/**
-	 * 鏂囦欢榛樿淇濆瓨灏忔椂鏁�
+	 * 鏂囦欢榛樿淇濆瓨灏忔椂鏁帮紝0涓嶉檺鍒�
 	 */
-	private static final int DEFAULT_HOUR = 8;
+	private static final int DEFAULT_HOUR = 0;
 	// 姣�5绉掓墽琛屼竴娆�
 	//@Scheduled(fixedRate = 1000000)
 	//@Scheduled(cron = "0 1 0 * * ?") // 姣忓ぉ涓婂崍0鐐�1鍒嗘墽琛�
@@ -62,6 +62,9 @@
 		LocalDateTime now = LocalDateTime.now();
 		for (Machine machine : machines) {
 			int remainHours = machine.getReceiveDirExpiryHours() != null ?machine.getReceiveDirExpiryHours():DEFAULT_HOUR;
+			if(remainHours == 0){
+				continue;
+			}
 			LocalDateTime earlyTime = now.minusHours(remainHours);
 			List<MachineFile> overTimeFiles = this.machineFileService.lambdaQuery().lt(MachineFile::getFileCreateTime,earlyTime)
 				.eq(MachineFile::getDirType,MachineFile.DIR_TYPE_REC)
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/SendDirCleanTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/SendDirCleanTask.java
index 6b7d12b..f7bd0ca 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/SendDirCleanTask.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/SendDirCleanTask.java
@@ -35,7 +35,7 @@
 	/**
 	 * 鏂囦欢榛樿淇濆瓨灏忔椂鏁�
 	 */
-	private static final int DEFAULT_HOUR = 8;
+	private static final int DEFAULT_HOUR = 0;
 	// 姣�5绉掓墽琛屼竴娆�
 	//@Scheduled(fixedRate = 1000000)
 	//@Scheduled(cron = "0 1 0 * * ?") // 姣忓ぉ涓婂崍0鐐�1鍒嗘墽琛�
@@ -61,6 +61,9 @@
 		LocalDateTime now = LocalDateTime.now();
 		for (Machine machine : machines) {
 			int remainHours = machine.getReceiveDirExpiryHours() != null ?machine.getSendDirExpiryHours():DEFAULT_HOUR;
+			if(remainHours == 0){
+				continue;
+			}
 			LocalDateTime earlyTime = now.minusHours(remainHours);
 			List<MachineFile> overTimeFiles = this.machineFileService.lambdaQuery().lt(MachineFile::getFileCreateTime,earlyTime)
 				.eq(MachineFile::getDirType,MachineFile.DIR_TYPE_SEND)

--
Gitblit v1.9.3