From 5173c99276023cac788875d5fa8d5cad84112777 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期一, 04 八月 2025 00:36:00 +0800
Subject: [PATCH] dnc导入导出格式修改

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java                               |   14 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveRecordService.java             |   43 --
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmParamController.java         |    6 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java     |   47 +-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveTableService.java              |   26 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramFlowStatusQueryService.java |    8 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java                  |   39 -
 doc/sql/mdm/mdm.mysql.all.create.sql                                                                         |    6 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/entity/Machine.java            |    8 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeController.java           |    6 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/ApproveRecord.java                     |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java      |    9 
 /dev/null                                                                                                    |  329 -------------------
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java            |  217 ++++++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java                           |    3 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/DncBackFile.java                    |    5 
 blade-service/blade-mdm/src/test/java/org/springblade/mdm/flow/service/ApproveTableServiceTest.java          |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java                 |   17 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmProgramImportController.java |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java       |  186 ----------
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramExchange.java              |    4 
 21 files changed, 329 insertions(+), 650 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/entity/Machine.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/entity/Machine.java
index 1a9f05f..6fdee96 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/entity/Machine.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/entity/Machine.java
@@ -10,6 +10,14 @@
 @Getter
 @TableName("mdm_machine")
 public class Machine extends BizEntity {
+	/**
+	 * 鐘舵�侊細1 鍚敤
+	 */
+	public static final int STATUS_ENABLE = 1;
+	/**
+	 * 鐘舵�侊細2 绂佺敤
+	 */
+	public static final int STATUS_DISABLED = 2;
 	private String name;
 	private String code;
 	/**
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java
index c4787dd..972dc77 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java
@@ -14,10 +14,8 @@
 import org.springblade.mdm.machineback.filewatch.FileWatcherService;
 import org.springblade.mdm.machineback.filewatch.MachineFileBackListener;
 import org.springblade.mdm.machineback.service.MachineBackFileService;
-import org.springblade.mdm.program.filewatch.ProgramBackMonitor;
 import org.springblade.mdm.program.service.NcProgramService;
 import org.springblade.system.feign.ISysClient;
-import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Component;
 
 import java.nio.file.Path;
@@ -37,27 +35,25 @@
 	private final MachineBackFileService machineBackFileService;
 	private final NcProgramService ncProgramService;
 	private final OssTemplate ossTemplate;
-
-	private final ProgramBackMonitor programBackMonitor;
+	private final ISysClient sysClient;
 	//private final FileWatcherService.FileChangeListener listener;
 	@PostConstruct
 	public void init() {
 		log.info("搴旂敤鍚姩鏃舵墽琛屽垵濮嬪寲鎿嶄綔 @PostConstruct");
 
-		programBackMonitor.monitorDir();
 		// 鍒濆鍖栭�昏緫
-		/*
+
 		R<String> networkTypeR = sysClient.getParamValue(ParamContants.NETWORK_TYPE_KEY);
 		String networkType = networkTypeR.getData() == null ? ParamContants.NETWORK_TYPE_SHEMI : networkTypeR.getData();
 		if (networkType.equals(ParamContants.NETWORK_TYPE_GONGKONG)) {
 			initMachineDirMonitor();
 		}
-		*/
+
 
 	}
 
 	/**
-	 * 鍒濆鍖栫洃鎺х洰褰�
+	 * 鍒濆鍖栨満搴婄洃鎺х洰褰�
 	 */
 	void initMachineDirMonitor() {
 		boolean locked = directorLockService.acquireLock();
@@ -65,7 +61,7 @@
 			log.info("鍥炰紶鎺ユ敹鐩綍宸茬粡琚叾浠栭儴缃茬偣浣嶉攣瀹氾紝鐩存帴杩斿洖");
 			return;
 		}
-		List<Machine> machineList = machineService.list();
+		List<Machine> machineList = machineService.lambdaQuery().eq(Machine::getStatus,Machine.STATUS_ENABLE).list();
 		List<String> monitorDirList = new ArrayList<String>();
 		machineList.forEach(m -> {
 			if (StringUtils.isNotEmpty(m.getProgReceiveDir())) {
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/ApproveRecord.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/ApproveRecord.java
index bbb5a05..fb72298 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/ApproveRecord.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/ApproveRecord.java
@@ -38,7 +38,7 @@
 	/**
 	 * 鏁版帶绋嬪簭id锛岃繖涓彲鑳戒笉闇�瑕侊紝鍙互鏍规嵁鍏宠仈琛╩dm_process_prog_ref鏉ヨ幏鍙�
 	 */
-	private Long ncProgramId;
+	//private Long ncProgramId;
 	/**
 	 * 绋嬪簭鍖呭悕瀵瑰簲鐨刵odeid
 	 */
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveRecordService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveRecordService.java
index acf9997..b098e0a 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveRecordService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveRecordService.java
@@ -51,7 +51,7 @@
 
 		save(rec);
 	}
-
+	/*
 
 	public void saveApproveRecordsOld(Task task, String processInstanceId, String operateResult, String comment) {
 
@@ -65,7 +65,7 @@
 				ApproveRecord rec = new ApproveRecord();
 				rec.setTaskName(task.getName());
 				rec.setComment(comment==null? StringUtils.EMPTY:comment);
-				rec.setNcProgramId(refObj.getNcProgramId());
+
 				rec.setOperateResult(operateResult);//瀹℃壒缁撴灉
 				rec.setOperateTime(DateUtil.now());
 				rec.setProcessInstanceId(processInstanceId);
@@ -76,8 +76,6 @@
 				save(rec);
 			}
 
-			//妫�鏌cprogram涓簄ull鐨勬暟鎹�
-			updateApproveRecords(processInstanceId,refList);
 		}else{
 			//濡傛灉杩樻病鏈夊叧鑱旂殑绋嬪簭鏁版嵁锛屽垯鎻掑叆涓�涓猵rogramId涓簄ull鐨�
 			ApproveRecord rec = new ApproveRecord();
@@ -89,46 +87,11 @@
 			rec.setProcessDefinitionKey(processDefinitionKey);
 			rec.setOperateResult(operateResult);
 			rec.setOperateTime(DateUtil.now());
-			rec.setNcProgramId(null);//绌虹殑绋嬪簭id
 			rec.setUserId(AuthUtil.getUserId());
 			rec.setUserNickname(AuthUtil.getNickName());
 
 			save(rec);
 		}
 	}
-
-	/**
-	 * 鏇存柊浠ュ墠鏃犳枃浠舵椂鍊欑殑鏁版嵁銆�
-	 * @param processInstanceId
-	 */
-	void updateApproveRecords(String processInstanceId,List<ProcessProgRef> refList) {
-
-		if(refList.isEmpty()) {
-			return;
-		}
-		List<ApproveRecord> records = this.lambdaQuery().isNull(ApproveRecord::getNcProgramId).eq(ApproveRecord::getProcessInstanceId, processInstanceId).list();
-		if(records.isEmpty()) {
-			return;
-		}
-
-		for(ApproveRecord record:records) {
-
-			for(int j=0;j< refList.size();j++) {
-				ProcessProgRef refObj = refList.get(j);
-
-				ApproveRecord record2 = new ApproveRecord();
-				BeanUtils.copyProperties(record, record2);
-				record2.setNcProgramId(refObj.getNcProgramId());
-
-				if(j>0){//鍚庣画鏁版嵁闇�瑕佹柊澧炴暟鎹�
-					record2.setId(null);
-					save(record2);
-				}else{//绗竴鏉℃槸鏇存柊鍘熺邯褰�
-					updateById(record2);
-				}
-			}
-
-		}
-
-	}
+	*/
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveTableService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveTableService.java
index 724d012..63e5680 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveTableService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveTableService.java
@@ -14,8 +14,10 @@
 import org.springblade.mdm.flow.entity.ApproveRecord;
 import org.springblade.mdm.flow.mapper.ApproveRecordMapper;
 import org.springblade.mdm.flow.vo.ApproveRecordVO;
+import org.springblade.mdm.program.entity.NcNode;
 import org.springblade.mdm.program.entity.NcProgram;
 import org.springblade.mdm.program.entity.ProcessProgRef;
+import org.springblade.mdm.program.service.NcNodeService;
 import org.springblade.mdm.program.service.NcProgramService;
 import org.springblade.mdm.program.service.ProcessProgRefService;
 import org.springframework.beans.BeanUtils;
@@ -36,10 +38,9 @@
 @Service
 @AllArgsConstructor
 public class ApproveTableService{
-	private final ProcessProgRefService processProgRefService;
 	private final FlowCommonService flowCommonService;
 	private final ApproveRecordService approveRecordService;
-	private final NcProgramService ncProgramService;
+	private final NcNodeService ncNodeService;
 	private final MachineService machineService;
 	private static final String UNCHECK_BOX = "鈽�";
 	private static final String CHECKED_BOX = "鈽�";
@@ -69,7 +70,7 @@
 		List<ApproveRecord> records = approveRecordService.lambdaQuery().eq(ApproveRecord::getProcessInstanceId, processInstanceId).orderByAsc(ApproveRecord::getCreateTime).list();
 		for(int i=0;i<records.size();i++){
 			ApproveRecord record = records.get(i);
-			if(record.getNcProgramId() ==null){
+			if(record.getNcNodeId() ==null){
 				continue;
 			}
 			printStep(document,bfChinese,record);
@@ -82,13 +83,13 @@
 	}
 
 	void printStep(Document document,BaseFont bfChinese,ApproveRecord record) throws DocumentException, IOException {
-		NcProgram ncProgram;
+		NcNode programPackageNode;
 		Machine machine;
-		if(record.getNcProgramId() !=null ) {
-			ncProgram = ncProgramService.getById(record.getNcProgramId());
-			machine = machineService.getByCode(ncProgram.getMachineCode());
+		if(record.getNcNodeId() !=null ) {
+			programPackageNode = ncNodeService.getById(record.getNcNodeId());
+			machine = machineService.getByCode(programPackageNode.getMachineCode());
 		}else{
-			ncProgram = new NcProgram();
+			programPackageNode = new NcNode();
 			machine = new Machine();
 		}
 
@@ -123,10 +124,10 @@
 		//PdfPCell cell12 = new PdfPCell();
 		//cell12.setColspan(2);
 		//cell12.addElement(new Phrase(ncProgram.getDrawingNo()));
-		table.addCell(getCell(ncProgram.getDrawingNo(),ft));//闆剁粍浠跺彿
+		table.addCell(getCell(programPackageNode.getDrawingNo(),ft));//闆剁粍浠跺彿
 
-		table.addCell(getCell(ncProgram.getProcessNo(),ft));//宸ュ簭鍙�
-		table.addCell(getCell(ncProgram.getCraftEdition(),ft));//宸ヨ壓鐗堟
+		table.addCell(getCell(programPackageNode.getProcessNo(),ft));//宸ュ簭鍙�
+		table.addCell(getCell(programPackageNode.getCraftEdition(),ft));//宸ヨ壓鐗堟
 		table.addCell(getCell(machine.getName(),ft));//鏈哄簥鍨嬪彿
 		table.addCell("");//璐熻矗浜猴紝宸ユ璐熻矗浜烘淳鍑烘椂闂�
 
@@ -208,7 +209,8 @@
 
 		PdfPCell cell2 = new PdfPCell();
 		cell2.setColspan(2);
-		cell2.addElement(new Phrase(ncProgram.getCode(),ft));//鏁版帶绋嬪簭缂栧彿
+
+		cell2.addElement(new Phrase("涓嶆槑纭�",ft));//鏁版帶绋嬪簭缂栧彿
 		table.addCell(cell2);
 
 		String pDateStr = " ";
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 6acabc6..ff0e043 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
@@ -1,6 +1,7 @@
 package org.springblade.mdm.flow.service;
 
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.flowable.engine.HistoryService;
 import org.flowable.engine.IdentityService;
 import org.flowable.engine.RuntimeService;
@@ -31,6 +32,7 @@
 /**
  * 鍥哄寲娴佺▼鏈嶅姟
  */
+@Slf4j
 @Service
 @AllArgsConstructor
 public class CureFlowService {
@@ -41,11 +43,6 @@
 
 	private final IdentityService identityService;
 
-	private final NcProgramService ncProgramService;
-
-	private final MachineService machineService;
-
-	private final ProcessProgRefService processProgRefService;
 	/**
 	 * 鍥哄寲娴佺▼鐨刱ey
 	 */
@@ -54,33 +51,22 @@
 
 
 	@Transactional
-	public void startCure(List<NcProgram> programs) {
-		//DncSendBackData sendBackData;
-		//List<Long> ncProgramIdList = dataList.stream().map(DncSendBackData::getId).toList();
-		//Map<String,List<NcProgram>> groupedProgram = groupProgramsByMachineCode(ncProgramIdList);
-		//List<NcProgram> programs = ncProgramService.listByIds(ncProgramIdList);
+	public void startCure(List<NcNode> programPackageList) {
 		//鏍规嵁鍒嗙粍鍚姩娴佺▼锛屽苟鎻掑叆鍏宠仈琛�
-		programs.forEach(this::startOne);
+		programPackageList.forEach(this::startOne);
 	}
 
 	/**
 	 * 鍚姩涓�涓暟鎺х▼搴忕殑鍥哄寲娴佺▼
-	 * @param prog 鏁版帶绋嬪簭瀹炰綋
+	 * @param programPackage 绋嬪簭鍖呭悕 鑺傜偣瀹炰綋
 	 */
-	public void startOne(NcProgram prog){
-
+	public void startOne(NcNode programPackage) {
 		Map<String, Object> vars = null;
-			//璇ョ▼搴忓湪璁″垝浠诲姟鏃� 鑾峰彇缂栧埗锛屾牎瀵癸紝瀹℃壒鐨勪汉鍛橈紝浣滀负榛樿鐢ㄦ埛锛屽叾涓紪鍒舵椂绗竴涓浐瀹氱殑鐢ㄦ埛
-		ProcessProgRef preRef = processProgRefService.lastDispatchDataByNcProgramId(prog.getId());
-		if(preRef != null) {
+		//璇ョ▼搴忓湪璁″垝浠诲姟鏃� 鑾峰彇缂栧埗锛屾牎瀵癸紝瀹℃壒鐨勪汉鍛橈紝浣滀负榛樿鐢ㄦ埛锛屽叾涓紪鍒舵椂绗竴涓浐瀹氱殑鐢ㄦ埛
+		if(programPackage.getProcessInstanceId() != null) {
 			//鑾峰彇瀹℃壒鐢ㄦ埛
-			/*
-			List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery().includeProcessVariables()
-				.processInstanceId(preRef.getProcessInstanceId())
-				.orderByHistoricTaskInstanceEndTime().desc()
-				.list();*/
 			HistoricProcessInstance instance = historyService.createHistoricProcessInstanceQuery()
-				.processInstanceId(preRef.getProcessInstanceId()).includeProcessVariables()
+				.processInstanceId(programPackage.getProcessInstanceId()).includeProcessVariables()
 				.singleResult();
 			if(instance != null) {//浣跨敤浠诲姟娲惧伐娴佺▼鐨勫彉閲�
 				vars = new HashMap<>(instance.getProcessVariables());
@@ -117,12 +103,9 @@
 
 		identityService.setAuthenticatedUserId(String.valueOf(AuthUtil.getUserId()));//璁剧疆娴佺▼鍙戣捣浜�
 		ProcessInstance pinst = runtimeService.startProcessInstanceByKey(PROCESS_KEY,businessKey,vars);
+		log.info("鍚姩鍥哄寲娴佺▼瀹屾垚锛屽疄渚媔d={}", pinst.getId());
+		//杩欓噷闇�瑕佹柊寤轰竴涓悓鍚嶇▼搴忓寘鍚嶏紝鍜屼笅灞炵殑鏂囦欢鍚楋紝涓嶉渶瑕侊紝鍦╠ncSendbackService涓柊寤虹殑锛岃繖閲屼笉澶勭悊
 
-		ProcessProgRef ref = new ProcessProgRef();
-		ref.setProcessInstanceId(pinst.getId());
-		ref.setNcProgramId(prog.getId());
-
-		processProgRefService.save(ref);
 	}
 
 	/**
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncBackFileController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncBackFileController.java
deleted file mode 100644
index f117a05..0000000
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncBackFileController.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.springblade.mdm.program.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.servlet.http.HttpServletResponse;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springblade.core.excel.util.ExcelUtil;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.mdm.program.service.DncBackFileService;
-import org.springblade.mdm.program.vo.DncBackFileQueryVO;
-import org.springblade.mdm.program.vo.DncBackFileVO;
-import org.springframework.web.bind.annotation.*;
-
-@AllArgsConstructor
-@Slf4j
-@RestController
-@RequestMapping("/program/file")
-@Tag(name = "DNC鍥炰紶鏂囦欢", description = "DNC鍥炰紶鏂囦欢")
-public class DncBackFileController {
-
-	private final DncBackFileService service;
-
-
-	/**
-	 * 鎺ユ敹
-	 */
-	@Operation(summary = "鎺ユ敹", description = "鎺ユ敹鏂囦欢")
-	@PostMapping("/accept")
-	public R<Void> accept(@RequestParam String ids) {
-		service.accept(ids);
-		return R.success();
-	}
-
-	/**
-	 *鎷掔粷锛屽氨鏄垹闄�
-	 */
-	@Operation(summary = "鎷掔粷", description = "鎷掔粷")
-	@PostMapping("/reject")
-	public R<Void> reject(@RequestParam String ids) {
-		try {
-			service.reject(ids);
-		} catch (Exception e) {
-			log.error("鎷掔粷寮傚父",e);
-			return R.fail(e.getMessage());
-		}
-		return R.status(true);
-	}
-
-	/**
-	 * 鍒嗛〉
-	 */
-	@Operation(summary = "鍒嗛〉鏌ヨ", description = "鍚嶇О鎴栫紪鐮�")
-	@GetMapping("/page")
-	public R<IPage<DncBackFileVO>> page(DncBackFileQueryVO query) {
-		IPage<DncBackFileVO> pages = service.pageQuery(query);
-		return R.data(pages);
-	}
-
-	/*
-	@Operation(summary = "瀵煎嚭Excel", description = "瀵煎嚭Excel")
-	@GetMapping("/export-excel")
-	public void exportExcel(MachineBackFileQueryVO query, HttpServletResponse response) {
-		query.setCurrent(1);
-		query.setSize(Integer.MAX_VALUE);
-
-		IPage<MachineBackFileVO> pages = service.pageQuery(query);
-		List<MachineBackFileExcelVO> list = new ArrayList<>();
-		pages.getRecords().forEach(m ->{
-			MachineBackFileExcelVO excelVO = new MachineBackFileExcelVO();
-			BeanUtils.copyProperties(m, excelVO);
-			excelVO.setCureStatus(m.getIsCured()==1?"宸插浐鍖�":"鏈浐鍖�");
-			list.add(excelVO);
-		});
-		ExcelUtil.export(response, "鏈哄簥鍥炰紶鏂囦欢" + DateUtil.time(), "鏈哄簥鍥炰紶鏂囦欢琛�", list, MachineBackFileExcelVO.class);
-	}
-
-	 */
-}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java
index b288a78..16c8d5f 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java
@@ -8,7 +8,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
-import org.springblade.mdm.program.service.NcProgramExchangeService;
+import org.springblade.mdm.program.service.DNCSendBackService;
 import org.springblade.mdm.program.vo.DncSendBackData;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -28,8 +28,7 @@
 @Slf4j
 public class DncSendBackController {
 
-	//private final DncSendBackService dncSendBackService;
-	private final NcProgramExchangeService ncProgramExchangeService;
+	private final DNCSendBackService dncSendBackService;
 	/**
 	 * 涓婁紶DNC鍥炰紶鏂囦欢
 	 *
@@ -40,7 +39,7 @@
 	@Operation(summary = "DNC鍥炰紶鏂囦欢瀵煎叆锛屼笂浼犳枃浠�", description = "涓婁紶DNC鍥炰紶鏂囦欢,骞惰繑鍥炶В鏋愮粨鏋�")
 	public R<List<DncSendBackData>> dncSendBackUpload(@RequestParam MultipartFile file) {
 		try {
-			return R.data(ncProgramExchangeService.dncSendBackUpload(file));
+			return R.data(dncSendBackService.dncSendBackUpload(file));
 		}catch (Exception e){
 			log.error("瀵煎叆閿欒",e);
 			return R.fail(e.getMessage());
@@ -59,7 +58,7 @@
 	@Operation(summary = "DNC鍥炰紶鏁版嵁鍏ュ簱", description = "鍏ュ簱锛屽悓鏃跺惎鍔ㄥ浐鍖栨祦绋�,鍏ュ弬涓轰笂浼犳槸瑙f瀽鐨勬暟鎹垪琛�")
 	public R<Void> dncSendBackAccept(@RequestParam String ids) {
 		try {
-			ncProgramExchangeService.dncFileAccept(ids);
+			dncSendBackService.dncFileAccept(ids);
 		}catch (Exception e){
 			log.error("鍏ュ簱閿欒",e);
 			return R.fail(e.getMessage());
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmParamController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmParamController.java
index ea9207f..c7b6ee8 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmParamController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmParamController.java
@@ -9,14 +9,8 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
-import org.springblade.mdm.program.service.NcProgramExchangeService;
-import org.springblade.mdm.program.vo.DncSendBackData;
 import org.springblade.system.feign.ISysClient;
-import org.springblade.system.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.List;
 
 /**
  * 娴佺▼绠$悊鎺ュ彛
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmProgramImportController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmProgramImportController.java
index 83ffe6c..39a59f0 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmProgramImportController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmProgramImportController.java
@@ -9,8 +9,6 @@
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
 import org.springblade.mdm.program.service.MdmProgramImportService;
-import org.springblade.mdm.program.service.NcProgramExchangeService;
-import org.springblade.mdm.program.vo.DncSendBackData;
 import org.springblade.mdm.program.vo.MdmProgramImportVO;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeController.java
index 92ed862..6aa1ec1 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeController.java
@@ -70,9 +70,11 @@
 		List<NcNodeVO> list = ncNodeService.lazyList(parentId);
 		if(list != null && !list.isEmpty()) {
 			for(NcNodeVO ncNodeVO : list) {
-				if(!"70".equals(ncNodeVO.getNodeType())){
+				if(!"60".equals(ncNodeVO.getNodeType())){
 					break;
 				}
+				ncNodeVO.setFlowStatus(programFlowStatusQueryService.queryFlowStatus(ncNodeVO.getProcessInstanceId()));
+				/*
 				NcProgram program = ncProgramService.getByBindNodeId(ncNodeVO.getId());
 				if(program != null) {
 					ncNodeVO.setProcessEdition(program.getProcessEdition());
@@ -83,7 +85,7 @@
 
 					//record涓壘涓嶅埌鏃舵湭鍚姩0锛涙壘鍒颁簡闇�瑕佹煡璇㈡祦绋嬪疄渚媔d锛屾槸鍚﹁繍琛屼腑
 					ncNodeVO.setFlowStatus(programFlowStatusQueryService.queryFlowStatus(program.getId()));
-				}
+				}*/
 			}
 
 		}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/DncBackFile.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/DncBackFile.java
index 8b75f94..7910bb8 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/DncBackFile.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/DncBackFile.java
@@ -17,7 +17,10 @@
 	public static int STATUS_ACCEPTED = 2;
 	public static int STATUS_REJECTED = 3;
 
-	private Long ncProgramId;
+	/**
+	 * 绋嬪簭鍖呭悕 鑺傜偣 鐨刬d
+	 */
+	private Long ncNodeId;
 	/**
 	 * 纭鏃堕棿
 	 */
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramExchange.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramExchange.java
index 484ed0f..5ff1758 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramExchange.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramExchange.java
@@ -21,8 +21,8 @@
 	 */
 	private int exchangeType;
 	/**
-	 * 鏁版帶绋嬪簭id
+	 * 绋嬪簭鍖呭悕 id
 	 */
-	private Long ncProgramId;
+	private Long ncNodeId;
 
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/filewatch/ProgramBackMonitor.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/filewatch/ProgramBackMonitor.java
deleted file mode 100644
index e914a1f..0000000
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/filewatch/ProgramBackMonitor.java
+++ /dev/null
@@ -1,154 +0,0 @@
-
-package org.springblade.mdm.program.filewatch;
-
-
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.core.oss.OssTemplate;
-import org.springblade.core.oss.model.BladeFile;
-import org.springblade.core.tool.api.R;
-import org.springblade.mdm.commons.contants.ParamContants;
-import org.springblade.mdm.flow.service.CureFlowService;
-import org.springblade.mdm.machineback.entity.MachineBackFile;
-import org.springblade.mdm.machineback.filewatch.*;
-import org.springblade.mdm.program.entity.DncBackFile;
-import org.springblade.mdm.program.entity.NcProgram;
-import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
-import org.springblade.mdm.program.service.DncBackFileService;
-import org.springblade.mdm.program.service.NcNodeService;
-import org.springblade.mdm.program.service.NcProgramService;
-import org.springblade.system.feign.ISysClient;
-import org.springframework.stereotype.Service;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * DNC鍥炰紶鍙婄洃鎺�
- *
- * @author yangys
- */
-@Slf4j
-@Service
-@AllArgsConstructor
-public class ProgramBackMonitor {
-	private final DirectorLockService directorLockService;
-	private final NcNodeService ncNodeService;
-	private final NcProgramService ncProgramService;
-	private final CureFlowService cureFlowService;
-	private final NcProgramExchangeMapper ncProgramExchangeMapper;
-	private final ISysClient sysClient;
-	private final DynamicDirectoryWatcher directoryWatcher;
-	private final OssTemplate ossTemplate;
-	private final DncBackFileService dncBackFileService;
-	private final String DEFAULT_MONITOR_DIR = "programback";
-
-	/**
-	 * 鐩戞帶鍥炰紶鐩綍锛堟墜鍔ㄥ洖浼狅級
-	 */
-	public void monitorDir(){
-		boolean locked = directorLockService.acquireLock();
-		if (!locked) {
-			log.info("鍥炰紶鎺ユ敹鐩綍宸茬粡琚叾浠栭儴缃茬偣浣嶉攣瀹氾紝鐩存帴杩斿洖");
-			return;
-		}
-		List<String> monitorDirList = getMonitorDirs();
-
-		for (String dir : monitorDirList) {
-			Path dirPath = Paths.get(dir);
-			try {
-				if(!dirPath.toFile().exists()) {
-					dirPath.toFile().mkdirs();
-				}
-				directoryWatcher.addDirectory(dirPath,getListener());
-			} catch (Exception e) {
-				log.error("娣诲姞鐩戞帶鐩綍寮傚父",e);
-			}
-		}
-	}
-
-	List<String> getMonitorDirs(){
-		R<String> monitorDirRes = sysClient.getParamValue(ParamContants.PROGRAM_MONITOR_DIR_KEY);
-		String dirStr = monitorDirRes.getData();
-		if(StringUtils.isEmpty(dirStr)){
-			dirStr = DEFAULT_MONITOR_DIR;
-		}
-		String[] dirs = StringUtils.split(dirStr,",");
-
-		return Arrays.asList(dirs);
-	}
-
-
-	FileWatcherService.FileChangeListener getListener() {
-		return new FileWatcherService.FileChangeListener() {
-			@Override
-			public void onFileCreated(Path filePath) {
-				log.info("鏂囦欢鍒涘缓锛屽鐞�");
-			}
-
-			@Override
-			public void onFileModified(Path filePath) {
-				try {
-					if(FileLockChecker.isFileComplete(filePath)){
-						log.info("鏂囦欢[{}]浼犺緭瀹屾垚,寮�濮嬪鐞�",filePath);
-
-						String programName = filePath.getFileName().toFile().getName();
-						NcProgram prog = ncProgramService.getByName(programName);
-						if(prog == null){
-							log.warn("鏂囦欢鍚嶆棤娉曞尮閰嶅埌鏁版帶绋嬪簭,{}",filePath);
-							return;
-						}
-						//淇濆瓨鏂囦欢鍒癱ss锛岄伩鍏嶅悗缁笉鍚岄儴缃茶妭鐐规嬁涓嶅埌鏂囦欢
-						String ossName;
-						String url;
-						try(FileInputStream fins = new FileInputStream(filePath.toFile());){
-							BladeFile bfile = ossTemplate.putFile(programName, fins);
-							ossName = bfile.getName();
-							url = bfile.getLink();
-
-						}
-
-						prog.setOssName(ossName);
-						prog.setUrl(url);
-						//TODO锛屾槸鍚﹀垹闄ゅ師鏉ョ殑鏂囦欢锛�
-						ncProgramService.updateById(prog);
-
-						cureFlowService.startOne(prog);//鍚姩涓�涓▼搴忕殑鍥哄寲娴佺▼
-						/*
-						DncBackFile backFile = new DncBackFile();
-						backFile.setNcProgramId(prog.getId());
-						//淇濆瓨鏂囦欢鍒癱ss锛岄伩鍏嶅悗缁笉鍚岄儴缃茶妭鐐规嬁涓嶅埌鏂囦欢
-						try(FileInputStream fins = new FileInputStream(filePath.toFile());){
-							BladeFile bfile = ossTemplate.putFile(programName, fins);
-							backFile.setOssName(bfile.getName());
-							backFile.setUrl(bfile.getLink());
-						}
-						dncBackFileService.save(backFile);
-
-						 */
-					}else{
-						log.warn("鏂囦欢浼犺緭涓紝鍚庣画鍐嶆搷浣�:{}",filePath);
-					}
-				} catch (IOException e) {
-					log.error("鍥炰紶鏂囦欢鎿嶄綔IO閿欒",e);
-					throw new RuntimeException(e);
-				} catch (InterruptedException e) {
-					log.error("sleep鍑洪敊",e);
-				} catch (Exception e) {
-					log.error("鏈哄簥鍥炰紶鏂囦欢澶勭悊寮傚父",e);
-				}
-			}
-
-			@Override
-			public void onFileDeleted(Path filePath) {
-				log.info("鏂囦欢鍒犻櫎锛屼笉澶勭悊");
-			}
-		};
-	}
-}
-
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
new file mode 100644
index 0000000..b1d2e8c
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java
@@ -0,0 +1,217 @@
+
+package org.springblade.mdm.program.service;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipFile;
+import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BizEntity;
+import org.springblade.core.mp.base.BizServiceImpl;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.model.BladeFile;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.FileUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.IoUtil;
+import org.springblade.mdm.flow.service.CureFlowService;
+import org.springblade.mdm.program.entity.NcNode;
+import org.springblade.mdm.program.entity.NcProgram;
+import org.springblade.mdm.program.entity.NcProgramExchange;
+import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
+import org.springblade.mdm.program.vo.DncSendBackData;
+import org.springblade.mdm.utils.CustomBinaryReader;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.util.*;
+
+/**
+ * DNC鍥炰紶鏂囦欢澶勭悊鏈嶅姟
+ *
+ * @author yangys
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class DNCSendBackService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> {
+	private final CureFlowService cureFlowService;
+	private final NcProgramService ncProgramService;
+	private final NcNodeService ncNodeService;
+	private final OssTemplate ossTemplate;
+	private final BladeRedis bladeRedis;
+
+	private String getFileKey(){
+		return "dncexpfile-"+ AuthUtil.getUserId();
+	}
+	/**
+	 * dnc鍥炰紶鏂囦欢涓婁紶
+	 * @param file DNC鍥炰紶鏂囦欢
+	 * @return 鍘嬬缉鍖呭唴绋嬪簭鍖呭悕鐨勫垪琛�
+	 */
+	public List<DncSendBackData> dncSendBackUpload(MultipartFile file) {
+		List<DncSendBackData> list;
+		try {
+			BladeFile bfile = ossTemplate.putFile(file);//涓婁紶锛屼緵鍚庣画鍏ュ簱浣跨敤
+			//璁剧疆涓�涓紦瀛橈紝2灏忔椂杩囨湡
+			bladeRedis.setEx(getFileKey(),bfile.getName(), Duration.ofHours(2));
+
+			InputStream zipFileInputStream = file.getInputStream();//test
+
+			byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream);
+			list = parseDncZipFromByteArray(bytes);
+
+		} catch (IOException e) {
+			log.error("涓婁紶dnc鍥炰紶鏂囦欢澶辫触",e);
+			throw new ServiceException("瑙f瀽DNC鍥炰紶鏁版嵁澶辫触");
+		}
+		return list;
+	}
+
+
+	/**
+	 * 浠庡帇缂╁寘 瑙f瀽鍥炰紶绋嬪簭鍒楄〃锛岃繖閲岃В鏋愮洰褰曞嵆鍙紝鐩綍灏辨槸绋嬪簭鍖呭悕
+	 * @param zipData 鍘嬬缉鍖呭瓧鑺�
+	 * @return 鍥炰紶绋嬪簭鍒楄〃
+	 * @throws IOException
+	 */
+	List<DncSendBackData> parseDncZipFromByteArray(byte[] zipData) throws IOException {
+		List<DncSendBackData> list = new ArrayList<>();
+
+		//Map<String,String> fileMd5Map = new HashMap<>();
+		Map<String,DncSendBackData> fileDataMap = new HashMap<>();
+		try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(zipData);
+			 ZipFile zipFile = new ZipFile(channel)) {
+
+			ZipArchiveEntry entry;
+			Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();
+			while (entries.hasMoreElements()) {
+				entry = entries.nextElement();
+				DncSendBackData progData = new DncSendBackData();
+				String entryName = entry.getName();
+				if (entry.isDirectory()){
+					//鐩綍锛屾墠鏄▼搴忓寘锛�
+					//鏌ヨ鏁版嵁搴擄紝瀵瑰簲涓婃墠鑳界‘璁ゆ椂鏈夋晥鐨勭▼搴忓寘
+					String packageName = StringUtils.removeEnd(entryName,"/");
+					List<NcNode> pkgList = ncNodeService.lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE).eq(NcNode::getName, packageName).eq(NcNode::getIsLastEdition,1).list();
+					if(!pkgList.isEmpty()) {
+						progData.setId(pkgList.get(0).getId());
+						progData.setProgramName(packageName);
+						progData.setFileBackTime(LocalDateTime.now());
+						//progData.setProgramNo(pkgList.get(0).getCode());
+						list.add(progData);
+					}
+				}
+			}
+
+		}
+
+		return list;
+	}
+
+
+	/**
+	 * 鍏ュ簱鍥炰紶鏂囦欢,骞跺惎鍔ㄥ浐鍖栨祦绋�
+	 * @param ids id鍒楄〃閫楀彿鍒嗛殧,绋嬪簭鍖呭悕 鑺傜偣鐨刬d
+	 * @return
+	 */
+	@Transactional
+	public void dncFileAccept(String ids) throws IOException {
+		List<Long> idList = Func.toLongList(ids);
+		//
+		NcProgramExchange exchange;
+		String pkgFileName = bladeRedis.get(getFileKey());
+		updateNodeDataByDNCBackData(pkgFileName,idList);
+		List<NcNode> pkgList = ncNodeService.listByIds(idList);
+		for(NcNode pkgNode :pkgList){
+			exchange = new NcProgramExchange();
+			exchange.setName(pkgNode.getName());
+			exchange.setExchangeType(2);//鍥炰紶
+			exchange.setNcNodeId(pkgNode.getId());
+
+			this.save(exchange);
+		}
+
+		cureFlowService.startCure(pkgList);
+	}
+
+	/**
+	 * 鏇存柊鑺傜偣锛屼富瑕佹槸鍒涘缓 绋嬪簭鍖呭悕 鐨勬柊鐗堟湰銆�
+	 * @param pkgFileName zip鏂囦欢鍚�
+	 * @param programPackageIdList 绋嬪簭鍖呭悕 鑺傜偣鐨刬d鍒楄〃
+	 * @throws IOException 璁块棶鏂囦欢寮傚父
+	 */
+	void updateNodeDataByDNCBackData(String pkgFileName, List<Long> programPackageIdList) throws IOException {
+		InputStream inputStream = this.ossTemplate.statFileStream(pkgFileName);
+		byte[] bytes = FileUtil.copyToByteArray(inputStream);
+
+		List<NcNode> nodeList = new ArrayList<>();
+		List<String> entryNameList = new ArrayList<>();
+		try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes);
+			 ZipFile zipFile = new ZipFile(channel)) {
+
+			ZipArchiveEntry entry;
+			Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();
+			while (entries.hasMoreElements()) {
+				entry = entries.nextElement();
+				entryNameList.add(entry.getName());
+			}
+
+			//鏍规嵁鍐呴儴鏂囦欢锛岃鍙栧拰鍒嗘瀽绋嬪簭鍖呭拰绋嬪簭鏂囦欢鏁版嵁
+			List<String> dirList = entryNameList.stream().filter(s -> s.endsWith("/")).toList();
+			for(String dir : dirList){
+				String programPackageName = StringUtils.removeEnd(dir,"/");
+				NcNode oriProgramPkg = this.ncNodeService.getLastEditionProgramPackage(programPackageName);
+				if(oriProgramPkg == null){
+					log.warn("鏈彂鐜板尮閰嶇殑绋嬪簭鍖呭悕{}",programPackageName);
+					continue;
+				}
+				//涓存椂娴嬭瘯娉ㄩ噴
+				/*
+				NcNode newProgramPkg = new NcNode();
+				BeanUtils.copyProperties(oriProgramPkg, newProgramPkg);
+				newProgramPkg.setId(null);
+				newProgramPkg.setIsLastEdition(1);
+				newProgramPkg.setCreateTime(null);
+				newProgramPkg.setUpdateTime(null);
+				newProgramPkg.setCreateUser(null);
+				newProgramPkg.setUpdateUser(null);
+
+				ncNodeService.save(newProgramPkg);
+
+				//鏃ф暟鎹洿鏂颁负鑰佺増鏈�
+				oriProgramPkg.setIsLastEdition(0);;
+				ncNodeService.save(oriProgramPkg);
+				*/
+				//鏌ユ壘鍖呬笅鐨勬枃浠舵暟鎹�,
+				entryNameList.stream().filter(s -> s.startsWith(dir)).forEach(entryName -> {
+					log.info(dir+"涓嬬殑鏂囦欢锛歿}",entryName);
+				});
+			}
+
+		}
+
+	}
+
+	void setBaseProperties(BizEntity entity, JSONObject jsonObject){
+		entity.setCreateTime(jsonObject.getDate("createTime"));
+		entity.setUpdateTime(jsonObject.getDate("updateTime"));
+		entity.setStatus(jsonObject.getInteger("status"));
+		entity.setCreateUser(jsonObject.getLong("createUser"));
+		entity.setUpdateUser(jsonObject.getLong("updateUser"));
+	}
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncBackFileService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncBackFileService.java
deleted file mode 100644
index 9cb255f..0000000
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncBackFileService.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package org.springblade.mdm.program.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import lombok.AllArgsConstructor;
-import org.springblade.core.mp.base.BizServiceImpl;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.oss.OssTemplate;
-import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.mdm.flow.service.CureFlowService;
-import org.springblade.mdm.program.entity.DncBackFile;
-import org.springblade.mdm.program.entity.NcProgram;
-import org.springblade.mdm.program.mapper.DncBackFileMapper;
-import org.springblade.mdm.program.vo.DncBackFileQueryVO;
-import org.springblade.mdm.program.vo.DncBackFileVO;
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@AllArgsConstructor
-@Service
-public class DncBackFileService extends BizServiceImpl<DncBackFileMapper, DncBackFile> {
-	private final NcProgramService progService;
-	private final OssTemplate ossTemplate;
-
-	private final CureFlowService cureFlowService;
-	/**
-	 * 鎺ュ彈
-	 * @param ids
-	 */
-	public void accept(String ids) {
-
-		List<Long> idList = Func.toLongList(ids);
-
-		for(Long id : idList){
-			DncBackFile backFile = this.getById(id);
-			backFile.setStatus(DncBackFile.STATUS_ACCEPTED);
-			backFile.setConfirmTime(DateUtil.now());
-			this.updateById(backFile);
-
-			//鏂板缓涓�涓▼搴忥紝灏嗚�佺殑绋嬪簭isLastEditon璁剧疆鏈�0锛岀劧鍚庡惎鍔ㄦ祦绋�
-			this.upgradeProgramAndStartCure(backFile.getNcProgramId(),backFile);
-		}
-	}
-
-	void upgradeProgramAndStartCure(long ncProgramId,DncBackFile backFile) {
-		NcProgram oldProgram = this.progService.getById(ncProgramId);
-		//鏇存柊鏂囦欢淇℃伅
-		oldProgram.setOssName(backFile.getOssName());
-		oldProgram.setUrl(backFile.getUrl());
-		//TODO锛屾槸鍚﹀垹闄ゅ師鏉ョ殑鏂囦欢锛�
-		progService.updateById(oldProgram);
-		/*
-		NcProgram newProgram = new NcProgram();
-		BeanUtils.copyProperties(oldProgram,newProgram);
-
-		oldProgram.setIsLastEdition(0);
-		progService.updateById(oldProgram);
-
-		newProgram.setId(null);
-		newProgram.setIsLastEdition(1);
-		progService.updateById(newProgram);
-
-		 */
-
-		cureFlowService.startOne(oldProgram);//鍚姩涓�涓▼搴忕殑鍥哄寲娴佺▼
-	}
-
-	/**
-	 * 鎷掔粷
-	 * @param ids
-	 */
-	public void reject(String ids) {
-		List<Long> idList = Func.toLongList(ids);
-
-		for(Long id : idList){
-			DncBackFile backFile = this.getById(id);
-			backFile.setStatus(DncBackFile.STATUS_REJECTED);
-			backFile.setConfirmTime(DateUtil.now());
-			this.ossTemplate.removeFile(backFile.getOssName());
-			this.updateById(backFile);
-		}
-
-	}
-
-	/**
-	 * DNC鍥炰紶绋嬪簭澶勭悊鍒嗛〉鏌ヨ
-	 * @param query 鏌ヨ鍙傛暟
-	 * @return 鍒嗛〉鏁版嵁
-	 */
-	public IPage<DncBackFileVO> pageQuery(DncBackFileQueryVO query) {
-		/*
-		IPage<DncBackFileVO> page = this.getBaseMapper().pageQuery(Condition.getPage(query),query);
-		*/
-		return this.getBaseMapper().pageQuery(Condition.getPage(query),query);
-	}
-
-}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
index ba63182..f180476 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
@@ -9,6 +9,7 @@
 import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
 import org.apache.commons.compress.archivers.zip.ZipFile;
 import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BizEntity;
 import org.springblade.core.mp.base.BizServiceImpl;
 import org.springblade.core.oss.OssTemplate;
@@ -39,7 +40,7 @@
 
 /**
  * MDM绋嬪簭瀵煎叆锛堝伐鎺х綉鍔熻兘锛�
- *
+ * 鐩墠宸ユ帶缃戝睍鐜板舰寮忔湭瀹氾紝鏆傛椂瀹炵幇鏆傚仠
  * @author yangys
  */
 @Slf4j
@@ -69,8 +70,6 @@
 			//璁剧疆涓�涓紦瀛橈紝2灏忔椂杩囨湡
 			bladeRedis.setEx(getFileKey(),bfile.getName(), Duration.ofHours(2));
 			String pkgFileName = bladeRedis.get(getFileKey());
-			//String fileName = file.getOriginalFilename();
-			//InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream());
 			InputStream zipFileInputStream = file.getInputStream();//test
 
 			byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream);
@@ -78,37 +77,12 @@
 
 
 		} catch (IOException e) {
-			log.error("涓婁紶dnc鍥炰紶鏂囦欢澶辫触",e);
-			list = Collections.emptyList();
+			log.error("瀵煎叆娑夊瘑缃戞憜娓℃枃浠跺け璐�",e);
+			throw new ServiceException("瑙f瀽DNC鍥炰紶鏁版嵁澶辫触");
 		}
 		return list;
 	}
 
-	InputStream convertFileToZip(InputStream inputStream) throws IOException {
-
-		File tempFile = createTempFile();
-		FileOutputStream fos = new FileOutputStream(tempFile);
-		CustomBinaryReader.read(inputStream,fos);
-
-
-		FileInputStream dInstream = new FileInputStream(tempFile);
-
-		return dInstream;
-	}
-
-	/**
-	 * 鍒涘缓涓�涓复鏃舵枃浠�
-	 * @return
-	 * @throws IOException
-	 */
-	File createTempFile() throws IOException {
-		Path tempDir = Paths.get(System.getProperty("java.io.tmpdir"));
-		// 鍦ㄤ复鏃剁洰褰曚腑鍒涘缓鏂囦欢
-		String tfilename = "t"+System.currentTimeMillis();
-		Path tempFile = Files.createTempFile(tempDir, tfilename, ".tmp");
-		System.out.println("鍒涘缓鐨勪复鏃舵枃浠�: " + tempFile);
-		return tempFile.toFile();
-	}
 	public static List<MdmProgramImportVO> parseMdmZipFromByteArray(byte[] zipData) throws IOException {
 		List<MdmProgramImportVO> list = new ArrayList<>();
 		Map<String,String> fileMd5Map = new HashMap<>();
@@ -125,41 +99,7 @@
 
 				if (!entry.isDirectory()) {
 					//鐩存帴瑙f瀽绋嬪簭鐨刯son鏂囦欢
-					if(entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)){
 
-						try (InputStream inputStream = zipFile.getInputStream(entry)) {
-							String jsonStr = IoUtil.readToString(inputStream);
-
-							JSONArray jsonArray = JSONArray.parseArray(jsonStr);
-							for(int i=0;i<jsonArray.size();i++){
-								JSONObject jsonObject = jsonArray.getJSONObject(i);
-								MdmProgramImportVO d = new MdmProgramImportVO();
-								d.setName(jsonObject.getString("name"));
-								d.setId(jsonObject.getLong("id"));
-								d.setCode(jsonObject.getString("code"));
-								d.setDescription(jsonObject.getString("description"));
-								d.setCategory(jsonObject.getString("category"));
-								d.setBindNcNodeId(jsonObject.getLong("bindNcNodeId"));
-								d.setIsLastEdition(jsonObject.getInteger("isLastEdition"));
-								d.setIsLocked(jsonObject.getInteger("isLocked"));
-								d.setIsTest(jsonObject.getInteger("isTest"));
-								d.setMachineCode(jsonObject.getString("machineCode"));
-								d.setNcNodeId(jsonObject.getLong("ncNodeId"));
-								d.setDrawingNo(jsonObject.getString("drawingNo"));
-								d.setProcessEdition(jsonObject.getString("processEdition"));
-
-								fileDataMap.put(d.getName(),d);
-
-								list.add(d);
-							}
-
-						}
-					}else{
-						try (InputStream inputStream = zipFile.getInputStream(entry)) {
-							fileMd5Map.put(entryName,DigestUtils.md5Hex(inputStream));//鑾峰彇鏂囦欢MD5
-						}
-
-					}
 
 				}
 
@@ -189,21 +129,6 @@
 		//
 		updateProgramFile(pkgFileName,idList);
 
-		List<NcProgram> progList = ncProgramService.listByIds(idList);
-		NcProgramExchange exchange;
-
-		for(NcProgram prog:progList){
-			exchange = new NcProgramExchange();
-			exchange.setName(prog.getName());
-			exchange.setExchangeType(2);//鍥炰紶
-			exchange.setNcProgramId(prog.getId());
-
-
-			this.save(exchange);
-
-		}
-
-
 	}
 
 	/**
@@ -229,114 +154,11 @@
 
 				String entryName = entry.getName();
 
-				if (!entry.isDirectory()) {
-					if(entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)){
-
-						try (InputStream insJson = zipFile.getInputStream(entry)) {
-							String jsonStr = IoUtil.readToString(insJson);
-
-							JSONArray jsonArray = JSONArray.parseArray(jsonStr);
-							for(int i=0;i<jsonArray.size();i++){
-								JSONObject jsonObject = jsonArray.getJSONObject(i);
-								NcProgram prog = new NcProgram();
-								prog.setId(jsonObject.getLong("id"));
-								prog.setName(jsonObject.getString("name"));
-
-								prog.setCode(jsonObject.getString("code"));
-								prog.setDescription(jsonObject.getString("description"));
-								prog.setCategory(jsonObject.getString("category"));
-								prog.setBindNcNodeId(jsonObject.getLong("bindNcNodeId"));
-								prog.setIsLastEdition(jsonObject.getInteger("isLastEdition"));
-								prog.setIsLocked(jsonObject.getInteger("isLocked"));
-								prog.setIsTest(jsonObject.getInteger("isTest"));
-								prog.setIsTextFile(jsonObject.getBoolean("isTextFile"));
-								prog.setMachineCode(jsonObject.getString("machineCode"));
-								prog.setNcNodeId(jsonObject.getLong("ncNodeId"));
-								prog.setDrawingNo(jsonObject.getString("drawingNo"));
-								prog.setProcessEdition(jsonObject.getString("processEdition"));
-
-								setBaseProperties(prog,jsonObject);
-
-								progList.add(prog);
-							}
-
-						}
-					}else if(entryName.equals(NcProgramExportDNCService.NODE_JSON_FILE)){
-						try (InputStream insJson = zipFile.getInputStream(entry)) {
-							String jsonStr = IoUtil.readToString(insJson);
-							JSONArray jsonArray = JSONArray.parseArray(jsonStr);
-							for (int i = 0; i < jsonArray.size(); i++) {
-								JSONObject jsonObject = jsonArray.getJSONObject(i);
-								NcNode node = new NcNode();
-								node.setId(jsonObject.getLong("id"));
-								node.setName(jsonObject.getString("name"));
-								node.setDescription(jsonObject.getString("description"));
-								node.setNodeType(jsonObject.getString("nodeType"));
-								node.setProcessName(jsonObject.getString("processName"));
-								node.setDrawingNo(jsonObject.getString("drawingNo"));
-								node.setMachineCode(jsonObject.getString("machineCode"));
-								node.setParentId(jsonObject.getLong("parentId"));
-								node.setParentIds(jsonObject.getString("parentIds"));
-								node.setIsCured(jsonObject.getInteger("isCured"));
-
-								setBaseProperties(node,jsonObject);
-
-								nodeList.add(node);
-							}
-						}
-					}else if(entryName.equals(NcProgramExportDNCService.APPROVE_RECORD_JSON_FILE)){
-						try (InputStream insJson = zipFile.getInputStream(entry)) {
-							String jsonStr = IoUtil.readToString(insJson);
-							JSONArray jsonArray = JSONArray.parseArray(jsonStr);
-							for (int i = 0; i < jsonArray.size(); i++) {
-								JSONObject jsonObject = jsonArray.getJSONObject(i);
-								ApproveRecord record = new ApproveRecord();
-								record.setId(jsonObject.getLong("id"));
-								record.setNcProgramId(jsonObject.getLong("ncProgramId"));
-								record.setUserId(jsonObject.getLong("userId"));
-								record.setUserNickname(jsonObject.getString("userNickname"));
-								record.setOperateResult(jsonObject.getString("operateResult"));
-								record.setOperateTime(jsonObject.getDate("operateTime"));
-								record.setComment(jsonObject.getString("comment"));
-								setBaseProperties(record,jsonObject);
-
-								recordList.add(record);
-							}
-						}
-					}
-
-				}
 			}
 
 		}
 
 
-		try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes);
-			 ZipFile zipFile = new ZipFile(channel)) {
-
-			ZipArchiveEntry entry;
-			Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();
-			while (entries.hasMoreElements()) {
-				entry = entries.nextElement();
-
-				String entryName = entry.getName();
-
-				if (!entry.isDirectory() && !entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)) {
-
-					for(NcProgram prog:progList){
-						if(prog.getName().equals(entryName)){
-							try (InputStream ncFileStream = zipFile.getInputStream(entry)) {
-								BladeFile bfile = this.ossTemplate.putFile(prog.getName(),ncFileStream);
-								prog.setOssName(bfile.getName());
-								prog.setUrl(bfile.getLink());
-							}
-							break;
-						}
-					}
-
-				}
-			}
-		}
 
 		for(NcNode node:nodeList){
 			NcNode nodeTemp = this.ncNodeService.getById(node.getId());
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 7ef1b53..f1bbde6 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
@@ -175,4 +175,21 @@
 		NcNode node = this.getById(id);
 		return this.baseMapper.historyByParentIdAndName(node.getParentId(),node.getName());
     }
+
+	/**
+	 * 鑾峰彇鈥滅▼搴忓寘鍚嶁�濈殑鏈�鏂扮増鏈�
+	 * @param name 鑺傜偣鍚嶇О
+	 * @return 鏈�鏂扮増鏈▼搴忔姤鍚嶈妭鐐�
+	 */
+	public NcNode getLastEditionProgramPackage(String name){
+		List<NcNode> pkgList = lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE)
+			.eq(NcNode::getName, name).eq(NcNode::getIsLastEdition,1).orderByDesc(NcNode::getCreateTime).list();
+
+		if(pkgList.isEmpty()){
+			return null;
+		}else{
+			return pkgList.get(0);
+		}
+	}
+
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java
deleted file mode 100644
index a685a4b..0000000
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java
+++ /dev/null
@@ -1,329 +0,0 @@
-
-package org.springblade.mdm.program.service;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
-import org.apache.commons.compress.archivers.zip.ZipFile;
-import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
-import org.springblade.core.mp.base.BizEntity;
-import org.springblade.core.mp.base.BizServiceImpl;
-import org.springblade.core.oss.OssTemplate;
-import org.springblade.core.oss.model.BladeFile;
-import org.springblade.core.redis.cache.BladeRedis;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.utils.FileUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.IoUtil;
-import org.springblade.mdm.flow.service.CureFlowService;
-import org.springblade.mdm.program.entity.NcNode;
-import org.springblade.mdm.program.entity.NcProgram;
-import org.springblade.mdm.program.entity.NcProgramExchange;
-import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
-import org.springblade.mdm.program.vo.DncSendBackData;
-import org.springblade.mdm.utils.CustomBinaryReader;
-import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.*;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.time.Duration;
-import java.time.LocalDateTime;
-import java.util.*;
-
-/**
- * 绋嬪簭浜ゆ崲锛坉nc瀵煎叆/瀵煎嚭锛�
- *
- * @author yangys
- */
-@Slf4j
-@Service
-@AllArgsConstructor
-public class NcProgramExchangeService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> {
-	private final CureFlowService cureFlowService;
-	private final NcProgramService ncProgramService;
-	private final NcNodeService ncNodeService;
-	private final OssTemplate ossTemplate;
-	private final BladeRedis bladeRedis;
-
-	private String getFileKey(){
-		return "dncexpfile-"+ AuthUtil.getUserId();
-	}
-	/**
-	 * dnc鍥炰紶鏂囦欢涓婁紶锛堣В鏋愬悗淇濆瓨鍏pload琛級
-	 * @param file DNC鍥炰紶鏂囦欢
-	 * @return
-	 */
-	public List<DncSendBackData> dncSendBackUpload(MultipartFile file) {
-		List<DncSendBackData> list;
-		try {
-			BladeFile bfile = ossTemplate.putFile(file);//涓婁紶锛屼緵鍚庣画鍏ュ簱浣跨敤
-			//璁剧疆涓�涓紦瀛橈紝2灏忔椂杩囨湡
-			bladeRedis.setEx(getFileKey(),bfile.getName(), Duration.ofHours(2));
-
-			//InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream());
-			InputStream zipFileInputStream = file.getInputStream();//test
-
-			byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream);
-			list = parseDncZipFromByteArray(bytes);
-
-		} catch (IOException e) {
-			log.error("涓婁紶dnc鍥炰紶鏂囦欢澶辫触",e);
-			list = Collections.emptyList();
-		}
-		return list;
-	}
-
-	InputStream convertFileToZip(InputStream inputStream) throws IOException {
-
-		File tempFile = createTempFile();
-		FileOutputStream fos = new FileOutputStream(tempFile);
-		CustomBinaryReader.read(inputStream,fos);
-
-
-		FileInputStream dInstream = new FileInputStream(tempFile);
-
-		return dInstream;
-	}
-
-	/**
-	 * 鍒涘缓涓�涓复鏃舵枃浠�
-	 * @return
-	 * @throws IOException
-	 */
-	File createTempFile() throws IOException {
-		Path tempDir = Paths.get(System.getProperty("java.io.tmpdir"));
-		// 鍦ㄤ复鏃剁洰褰曚腑鍒涘缓鏂囦欢
-		String tfilename = "t"+System.currentTimeMillis();
-		Path tempFile = Files.createTempFile(tempDir, tfilename, ".tmp");
-		System.out.println("鍒涘缓鐨勪复鏃舵枃浠�: " + tempFile);
-		return tempFile.toFile();
-	}
-	public static List<DncSendBackData> parseDncZipFromByteArray(byte[] zipData) throws IOException {
-		List<DncSendBackData> list = new ArrayList<>();
-		//List<DncSendBackData> datas  = ZipFileDirectoryScanner.getFilesInDirectoryRecursive(zipData, "");
-
-		Map<String,String> fileMd5Map = new HashMap<>();
-		Map<String,DncSendBackData> fileDataMap = new HashMap<>();
-		try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(zipData);
-			 ZipFile zipFile = new ZipFile(channel)) {
-
-			ZipArchiveEntry entry;
-			Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();
-			while (entries.hasMoreElements()) {
-			//while ((entry = zis.getNextZipEntry()) != null) {
-				entry = entries.nextElement();
-				DncSendBackData prog = new DncSendBackData();
-				String entryName = entry.getName();
-
-				if (!entry.isDirectory()) {
-					//鐩存帴瑙f瀽绋嬪簭鐨刯son鏂囦欢
-					if(entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)){
-
-						try (InputStream inputStream = zipFile.getInputStream(entry)) {
-							String jsonStr = IoUtil.readToString(inputStream);
-
-							JSONArray jsonArray = JSONArray.parseArray(jsonStr);
-							for(int i=0;i<jsonArray.size();i++){
-								JSONObject jsonObject = jsonArray.getJSONObject(i);
-								DncSendBackData d = new DncSendBackData();
-								d.setProgramName(jsonObject.getString("name"));
-								d.setId(jsonObject.getLong("id"));
-								d.setProgramNo(jsonObject.getString("code"));
-								d.setFileBackTime(LocalDateTime.now());//鍒拌揪鏃堕棿
-
-								fileDataMap.put(d.getProgramName(),d);
-								list.add(d);
-							}
-
-						}
-					}else{
-						try (InputStream inputStream = zipFile.getInputStream(entry)) {
-							fileMd5Map.put(entryName,DigestUtils.md5Hex(inputStream));//鑾峰彇鏂囦欢MD5
-						}
-
-					}
-
-				}
-
-			}
-
-		}
-		//璁剧疆md5鍊�
-		fileDataMap.forEach((k,v)->{
-			if(fileMd5Map.containsKey(k)){
-				v.setMd5(fileMd5Map.get(k));
-			}
-		});
-		return list;
-	}
-
-
-	/**
-	 * 鍏ュ簱鍥炰紶鏂囦欢,骞跺惎鍔ㄥ浐鍖栨祦绋�
-	 * @param ids id鍒楄〃閫楀彿鍒嗛殧
-	 * @return
-	 */
-	public void dncFileAccept(String ids) throws IOException {
-		List<Long> idList = Func.toLongList(ids);
-		//
-		NcProgramExchange exchange;
-		String pkgFileName = bladeRedis.get(getFileKey());
-		updateProgramData(pkgFileName,idList);
-		List<NcProgram> progList = ncProgramService.listByIds(idList);
-		for(NcProgram prog:progList){
-			exchange = new NcProgramExchange();
-			exchange.setName(prog.getName());
-			exchange.setExchangeType(2);//鍥炰紶
-			exchange.setNcProgramId(prog.getId());
-
-			this.save(exchange);
-
-		}
-
-		cureFlowService.startCure(progList);
-	}
-
-	void updateProgramData(String pkgFileName,List<Long> idList) throws IOException {
-		InputStream inputStream = this.ossTemplate.statFileStream(pkgFileName);
-		byte[] bytes = FileUtil.copyToByteArray(inputStream);
-
-		List<NcNode> nodeList = new ArrayList<>();
-		List<NcProgram> progList = new ArrayList<>();
-
-		try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes);
-			 ZipFile zipFile = new ZipFile(channel)) {
-
-			ZipArchiveEntry entry;
-			Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();
-			while (entries.hasMoreElements()) {
-				entry = entries.nextElement();
-
-				String entryName = entry.getName();
-
-				if (entry.isDirectory()) {
-					continue;
-				}
-				if(entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)){
-
-					try (InputStream insJson = zipFile.getInputStream(entry)) {
-						String jsonStr = IoUtil.readToString(insJson);
-
-						JSONArray jsonArray = JSONArray.parseArray(jsonStr);
-						for(int i=0;i<jsonArray.size();i++){
-							JSONObject jsonObject = jsonArray.getJSONObject(i);
-							NcProgram program = new NcProgram();
-							program.setId(jsonObject.getLong("id"));
-							if(!idList.contains(program.getId())){//涓嶆槸閫夊畾鍏ュ簱鐨�
-								continue;
-							}
-							program.setName(jsonObject.getString("name"));
-
-							program.setCode(jsonObject.getString("code"));
-							program.setDescription(jsonObject.getString("description"));
-							program.setCategory(jsonObject.getString("category"));
-							program.setBindNcNodeId(jsonObject.getLong("bindNcNodeId"));
-							program.setIsLastEdition(jsonObject.getInteger("isLastEdition"));
-							program.setIsLocked(jsonObject.getInteger("isLocked"));
-							program.setIsTest(jsonObject.getInteger("isTest"));
-							program.setMachineCode(jsonObject.getString("machineCode"));
-							program.setNcNodeId(jsonObject.getLong("ncNodeId"));
-							program.setDrawingNo(jsonObject.getString("drawingNo"));
-							program.setProcessEdition(jsonObject.getString("processEdition"));
-
-							setBaseProperties(program,jsonObject);
-
-							progList.add(program);
-						}
-
-					}
-				}else if(entryName.equals(NcProgramExportDNCService.NODE_JSON_FILE)){
-					try (InputStream insJson = zipFile.getInputStream(entry)) {
-						String jsonStr = IoUtil.readToString(insJson);
-						JSONArray jsonArray = JSONArray.parseArray(jsonStr);
-						for (int i = 0; i < jsonArray.size(); i++) {
-							JSONObject jsonObject = jsonArray.getJSONObject(i);
-							NcNode node = new NcNode();
-							node.setId(jsonObject.getLong("id"));
-							node.setName(jsonObject.getString("name"));
-							node.setDescription(jsonObject.getString("description"));
-							node.setNodeType(jsonObject.getString("nodeType"));
-							node.setProcessName(jsonObject.getString("processName"));
-							node.setDrawingNo(jsonObject.getString("drawingNo"));
-							node.setMachineCode(jsonObject.getString("machineCode"));
-							node.setParentId(jsonObject.getLong("parentId"));
-							node.setParentIds(jsonObject.getString("parentIds"));
-							node.setIsCured(jsonObject.getInteger("isCured"));
-
-							setBaseProperties(node,jsonObject);
-
-							nodeList.add(node);
-						}
-					}
-				}
-
-			}
-
-		}
-
-		//涓婁紶鍘嬬缉鍖呭唴鐨勭▼搴忓苟鏇存柊绋嬪簭鏂囦欢鍦板潃
-		try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes);
-			 ZipFile zipFile = new ZipFile(channel)) {
-
-			ZipArchiveEntry entry;
-			Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();
-			while (entries.hasMoreElements()) {
-				entry = entries.nextElement();
-
-				String entryName = entry.getName();
-
-				if (!entry.isDirectory() && !NcProgramExportDNCService.isDataFile(entryName)) {
-
-					for(NcProgram prog:progList){
-						if(prog.getName().equals(entryName)){
-							try (InputStream ncFileStream = zipFile.getInputStream(entry)) {
-								BladeFile bfile = this.ossTemplate.putFile(prog.getName(),ncFileStream);
-								prog.setOssName(bfile.getName());
-								prog.setUrl(bfile.getLink());
-							}
-							break;
-						}
-					}
-
-				}
-			}
-		}
-
-		for(NcNode node:nodeList){
-			NcNode nodeTemp = this.ncNodeService.getById(node.getId());
-			if(nodeTemp == null){
-				ncNodeService.save(node);
-			}else{
-				ncNodeService.updateById(node);
-			}
-		}
-
-		for(NcProgram prog:progList){
-			NcProgram ncTemp = ncProgramService.getById(prog.getId());
-			if(ncTemp == null){
-				ncProgramService.save(prog);
-			}else{
-				ncProgramService.updateById(prog);
-			}
-		}
-
-	}
-
-	void setBaseProperties(BizEntity entity, JSONObject jsonObject){
-		entity.setCreateTime(jsonObject.getDate("createTime"));
-		entity.setUpdateTime(jsonObject.getDate("updateTime"));
-		entity.setStatus(jsonObject.getInteger("status"));
-		entity.setCreateUser(jsonObject.getLong("createUser"));
-		entity.setUpdateUser(jsonObject.getLong("updateUser"));
-	}
-}
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 c1ab323..f07b78c 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
@@ -50,18 +50,10 @@
 	private final NcNodeService ncNodeService;
 	private final OssTemplate ossTemplate;
 	private final FlowProgramFileService flowProgramFileService;
-	public static final String PROGRAM_JSON_FILE = "exp_mdm_nc_program.json";
+	//public static final String PROGRAM_JSON_FILE = "exp_mdm_nc_program.json";
 	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";
 
-	/**
-	 * 鏄惁鍘嬬缉鍖呭唴鐨勬暟鎹枃浠�
-	 * @param filename 鏂囦欢鍚嶇О
-	 * @return
-	 */
-	public static boolean isDataFile(String filename){
-		return StringUtils.equals(filename, PROGRAM_JSON_FILE) || StringUtils.equals(filename, NODE_JSON_FILE) || StringUtils.equals(filename, APPROVE_RECORD_JSON_FILE);
-	}
 	/**
 	 * 鍒嗛〉鏌ヨ
 	 * @param query 鏌ヨ鍙傛暟
@@ -90,12 +82,6 @@
 				NcProgramApproved approved = approvedService.getById(approvedId);
 				programPackageNodeIdList.add(approved.getNcNodeId());
 
-				/*
-				String filename = prog.getOssName();
-				InputStream inputStream = ossTemplate.statFileStream(filename);
-
-				addInputStreamToZip(zipOut, inputStream, prog.getName());
-				*/
 				addProgramPackageToZip(zipOut,approved);
 			}
 			addDataJson(zipOut, programPackageNodeIdList);
@@ -121,6 +107,11 @@
 		FlowProgramFile programFile;
 		for (NcNode node : programNodes) {
 			String filePathInZip = packageFolder + node.getName();
+			programFile = this.flowProgramFileService.getById(node.getFlowProgramFileId());
+
+			InputStream inputStream = ossTemplate.statFileStream(programFile.getOssName());
+
+			/*
 			ZipEntry fileEntry = new ZipEntry(filePathInZip);
 
 			zipOut.putNextEntry(fileEntry);
@@ -133,6 +124,10 @@
 				zipOut.write(buffer, 0, length);
 			}
 			zipOut.closeEntry();
+
+			 */
+
+			this.addInputStreamToZip(zipOut,inputStream,filePathInZip);
 		}
 
 	}
@@ -142,7 +137,6 @@
 	 * @param zipOut
 	 */
 	void addDataJson(ZipOutputStream zipOut, List<Long> programPackageNodeIdList) throws IOException {
-		//addProgramDataJson(zipOut, programPackageNodeIdList);
 		addNodeDataJson(zipOut, programPackageNodeIdList);
 		addApproveRecordDataJson(zipOut, programPackageNodeIdList);
 	}
@@ -163,7 +157,7 @@
 			allNodeIds.add(node.getId());
 		}
 		//鍔犲叆绋嬪簭鍖呬笅绾х殑绋嬪簭鑺傜偣
-		List<NcNode> programNodes = ncNodeService.lambdaQuery().in(NcNode::getParentId, pkgNodes.stream().map(NcNode::getId)).list();
+		List<NcNode> programNodes = ncNodeService.lambdaQuery().in(NcNode::getParentId, pkgNodes.stream().map(NcNode::getId).toList()).list();
 
 		allNodeIds.addAll(programNodes.stream().map(NcNode::getId).toList());
 		List<Long>  distinctIds = allNodeIds.stream().distinct().toList();
@@ -175,7 +169,7 @@
 			addSuperProperties(recObj,node);
 			jsonArray.add(recObj);
 		}
-		addInputStreamToZip(zipOut,new ByteArrayInputStream(jsonArray.toJSONString().getBytes(StandardCharsets.UTF_8)),PROGRAM_JSON_FILE);
+		addInputStreamToZip(zipOut,new ByteArrayInputStream(jsonArray.toJSONString().getBytes(StandardCharsets.UTF_8)),NODE_JSON_FILE);
 
 	}
 
@@ -209,10 +203,12 @@
 	 * @param programPackageNodeIdList 绋嬪簭鍖呭悕鐨刬d鍒楄〃
 	 */
 	void addApproveRecordDataJson(ZipOutputStream zipOut, List<Long> programPackageNodeIdList) throws IOException {
-		List<String> instanceIds = this.ncNodeService.lambdaQuery().in(NcNode::getProcessInstanceId, programPackageNodeIdList)
+		/*
+		List<String> instanceIds = this.ncNodeService.lambdaQuery().in(NcNode::getId, programPackageNodeIdList)
 			.list().stream().map(NcNode::getProcessInstanceId).toList();
-
-		List<ApproveRecord> records = approveRecordService.lambdaQuery().in(ApproveRecord::getProcessInstanceId, instanceIds).list();
+*/
+		//List<ApproveRecord> records = approveRecordService.lambdaQuery().in(ApproveRecord::getProcessInstanceId, instanceIds).list();
+		List<ApproveRecord> records = approveRecordService.lambdaQuery().in(ApproveRecord::getNcNodeId, programPackageNodeIdList).list();
 
 		JSONArray jsonArray = new JSONArray();
 		for(ApproveRecord record : records){
@@ -244,7 +240,14 @@
 		recObj.put("createDept",entity.getCreateDept());
 	}
 
-	public void addInputStreamToZip(ZipOutputStream zipOut, InputStream inputStream, String entryName)
+	/**
+	 * 灏� 杈撳叆娴� 涓殑鍐呭鍐欏叆zip
+	 * @param zipOut zip杈撳嚭娴�
+	 * @param inputStream 杈撳叆娴�
+	 * @param entryName 鏂囦欢鍚�
+	 * @throws IOException
+	 */
+	void addInputStreamToZip(ZipOutputStream zipOut, InputStream inputStream, String entryName)
 		throws IOException {
 		// 鍒涘缓鏂扮殑 ZIP 鏉$洰
 		ZipEntry zipEntry = new ZipEntry(entryName);
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramFlowStatusQueryService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramFlowStatusQueryService.java
index d1cb144..064ac45 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramFlowStatusQueryService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramFlowStatusQueryService.java
@@ -31,14 +31,14 @@
 
 	private final ApproveRecordService approveRecordService;
 	private final HistoryService historyService;
-	public int queryFlowStatus(Long ncPogramId) {
+	public int queryFlowStatus(String processInstanceId) {
 
-		List<ApproveRecord> records = approveRecordService.lambdaQuery().eq(ApproveRecord::getNcProgramId, ncPogramId).orderByDesc(ApproveRecord::getCreateTime).last("limit 1").list();
+		//List<ApproveRecord> records = approveRecordService.lambdaQuery().eq(ApproveRecord::getNcProgramId, ncPogramId).orderByDesc(ApproveRecord::getCreateTime).last("limit 1").list();
 
-		if(records.isEmpty()){
+		if(processInstanceId == null){
 			return 0;
 		}
-		String processInstanceId = records.get(0).getProcessInstanceId();
+		//String processInstanceId = records.get(0).getProcessInstanceId();
 
 		int status = 0;
 		HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java
index ebbbbe8..7bb5827 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java
@@ -47,7 +47,8 @@
 	private Integer flowStatus;
 	@Schema(description = "瀛愯妭鐐�")
 	private List<NcNodeVO> children;
-
+	@Schema(description = "娴佺▼瀹炰緥id锛岀▼搴忓寘鑺傜偣鏈夋灞炴��")
+	private String processInstanceId;
 	public void addChildren(NcNodeVO node){
 		if(children == null){
 			children = new ArrayList<NcNodeVO>();
diff --git a/blade-service/blade-mdm/src/test/java/org/springblade/mdm/flow/service/ApproveTableServiceTest.java b/blade-service/blade-mdm/src/test/java/org/springblade/mdm/flow/service/ApproveTableServiceTest.java
index beb3b56..df464e0 100644
--- a/blade-service/blade-mdm/src/test/java/org/springblade/mdm/flow/service/ApproveTableServiceTest.java
+++ b/blade-service/blade-mdm/src/test/java/org/springblade/mdm/flow/service/ApproveTableServiceTest.java
@@ -11,7 +11,7 @@
 public class ApproveTableServiceTest {
 	@Test
 	public void test(){
-		ApproveTableService s = new ApproveTableService(null,null,null,null,null);
+		ApproveTableService s = new ApproveTableService(null,null,null,null);
 		try {
 			//s.exportApproveTable("1",new FileOutputStream("d:/t.pdf"));
 		} catch (Exception e) {
diff --git a/doc/sql/mdm/mdm.mysql.all.create.sql b/doc/sql/mdm/mdm.mysql.all.create.sql
index 452025f..a411f5f 100644
--- a/doc/sql/mdm/mdm.mysql.all.create.sql
+++ b/doc/sql/mdm/mdm.mysql.all.create.sql
@@ -276,7 +276,7 @@
   `id` bigint NOT NULL,
   `tenant_id` varchar(6) DEFAULT NULL COMMENT '鎵�灞炵鎴�',
   `name` varchar(100) NOT NULL COMMENT '绋嬪簭鍚嶇О',
-  `nc_program_id` bigint DEFAULT NULL COMMENT '绋嬪簭鏂囦欢id',
+  `nc_node_id` bigint DEFAULT NULL COMMENT '绋嬪簭鍖呭悕 鐨勮妭鐐筰d',
   `status` int DEFAULT NULL COMMENT '涓氬姟鐘舵��',
   `exchange_type` int DEFAULT NULL COMMENT '浜ゆ崲绫诲瀷,1:涓嬪彂;2:鍥哄寲(dnc鍥炰紶)',
   `create_dept` bigint DEFAULT NULL COMMENT '鍒涘缓鍗曚綅',
@@ -311,7 +311,7 @@
 CREATE TABLE `mdm_dnc_back_file` (
      `id` bigint NOT NULL,
      `tenant_id` varchar(6) DEFAULT NULL COMMENT '鎵�灞炵鎴�',
-     `nc_program_id` bigint NOT NULL COMMENT '绋嬪簭缂栫爜',
+     `nc_node_id` bigint NOT NULL COMMENT '绋嬪簭鍖呭悕 鑺傜偣id',
      `confirm_time` datetime DEFAULT NULL COMMENT '纭鏃堕棿',
      `oss_name` varchar(100) NULL COMMENT 'oss涓殑鏂囦欢鍚�',
      `url` varchar(400) NOT NULL COMMENT '鏂囦欢鍦板潃',
@@ -325,7 +325,7 @@
      `update_user` bigint DEFAULT NULL COMMENT '鏇存柊浜�',
      PRIMARY KEY (`id`) USING BTREE
 
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='鏈哄簥鍥炰紶鏂囦欢';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='DNC鍥炰紶鏂囦欢璁板綍';
 
 
 DROP TABLE IF EXISTS `mdm_file_locks`;

--
Gitblit v1.9.3