From 31ecdb8c700529a59dd762f0c47f0ed9c66d5092 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期四, 25 九月 2025 20:40:07 +0800
Subject: [PATCH] 工控网任务

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/FileSendRecord.java                          |    5 
 blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/MdmProgramImportServiceTest.java                |   31 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineCollectFileController.java        |    7 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineAcceptedFileService.java             |   73 +++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java                 |   12 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/vo/MachineBackTaskQueryVO.java                         |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java        |   61 ++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/service/MachineBackTaskService.java                    |   17 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineAcceptedFile.java                     |    4 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineFileController.java               |   14 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java                             |   32 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileService.java                     |   16 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java                |   25 -
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml                        |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramOnMachineService.java                    |   37 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/events/ExportedToInnerEvent.java                    |   23 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineAcceptedFileHandleController.java |   30 +-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java            |   32 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/MachineAcceptedFileVO.java                       |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/utils/FileContentUtil.java                                      |   16 +
 /dev/null                                                                                                                 |   97 -------
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineAcceptedFileMapper.xml                |    6 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/listeners/ExportToInnerListener.java                |   85 ++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/mapper/MachineBackTaskMapper.xml                       |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineAcceptedFileMapper.java               |    4 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileScanService.java                 |   24 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java                    |   59 ++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessor.java      |    9 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/controller/OssFileController.java                       |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/entity/MachineBackTask.java                            |   20 +
 30 files changed, 564 insertions(+), 185 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/controller/OssFileController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/controller/OssFileController.java
index 7598af1..9f5845b 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/controller/OssFileController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/controller/OssFileController.java
@@ -33,8 +33,6 @@
 public class OssFileController {
 
 	@Autowired
-	private NcProgramApprovedService ncProgramApprovedService;
-	@Autowired
 	private OssFileCommonService ossFileCommonService;
 	@Autowired
 	private ParamService paramService;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java
index db03bef..a5c0091 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java
@@ -128,15 +128,23 @@
 
 		ProgramNodeVO recNode = new ProgramNodeVO();
 		recNode.setId(nodeMachine.getId()+"_"+MachineFile.DIR_TYPE_REC);
-		recNode.setName("REC");
+		recNode.setName(MachineFile.DIR_TYPE_REC);
 		recNode.setMachineCode(nodeMachine.getMachineCode());
 		recNode.setDirType(MachineFile.DIR_TYPE_REC);
 		recNode.setNodeType("dir");
 		dirNodes.add(recNode);
 
+		ProgramNodeVO progNode = new ProgramNodeVO();
+		progNode.setId(nodeMachine.getId()+"_"+MachineFile.DIR_TYPE_PROGRAM);
+		progNode.setName(MachineFile.DIR_TYPE_PROGRAM);
+		progNode.setMachineCode(nodeMachine.getMachineCode());
+		progNode.setDirType(MachineFile.DIR_TYPE_PROGRAM);
+		progNode.setNodeType("dir");
+		dirNodes.add(progNode);
+
 		ProgramNodeVO tempNode = new ProgramNodeVO();
 		tempNode.setId(nodeMachine.getId()+"_"+MachineFile.DIR_TYPE_TEMP);
-		tempNode.setName("TEMP");
+		tempNode.setName(MachineFile.DIR_TYPE_TEMP);
 		tempNode.setMachineCode(nodeMachine.getMachineCode());
 		tempNode.setDirType(MachineFile.DIR_TYPE_TEMP);
 		tempNode.setNodeType("dir");
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/entity/MachineBackTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/entity/MachineBackTask.java
index 3372414..a798939 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/entity/MachineBackTask.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/entity/MachineBackTask.java
@@ -1,5 +1,6 @@
 package org.springblade.mdm.gkw.task.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Getter;
 import lombok.Setter;
@@ -16,13 +17,21 @@
 @TableName("mdm_machine_back_task")
 public class MachineBackTask extends BizEntity {
 	/**
+	 * 鐘舵�侊細鏈畬鎴�
+	 */
+	public static int STATUS_PENDING = 1;
+	/**
+	 * 鐘舵�侊細宸插畬鎴�
+	 */
+	public static int STATUS_FINISHED = 2;
+	/**
 	 * 浠诲姟绫诲瀷锛氬伐鑹虹紪鍒朵换鍔�
 	 */
-	private static final long TASK_TYPE_PROGRAM = 1;
+	public static final int TASK_TYPE_PROGRAM = 1;
 	/**
 	 * 浠诲姟绫诲瀷锛氱幇鍦虹紪鍒朵换鍔�
 	 */
-	private static final long TASK_TYPE_ON_MACHINE = 2;
+	public static final int TASK_TYPE_ON_MACHINE = 2;
 	/**
 	 * 鏂囦欢鍚�
 	 */
@@ -37,9 +46,14 @@
 	 */
 	private String deviation;
 	/**
+	 * 绋嬪簭鎬绘鏁�/鐜板満缂栧埗鐨�=0
+	 */
+	private int segCount;
+	/**
 	 * 浠诲姟绫诲瀷
 	 */
-	private String taskType;
+	@TableField("task_type")
+	private int taskType;
 
 	private Date finishTime;
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/mapper/MachineBackTaskMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/mapper/MachineBackTaskMapper.xml
index be0fd66..5868e59 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/mapper/MachineBackTaskMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/mapper/MachineBackTaskMapper.xml
@@ -6,7 +6,7 @@
     <!--鏂囦欢璁板綍鏌ヨ-->
 
     <select id="pageQuery" resultType="org.springblade.mdm.gkw.task.vo.MachineBackTaskVO">
-        select t.id,t.program_name,t.machine_code,t.task_type,t.finish_time,t.create_time,t.status,t.update_time,u.name create_user_name
+        select t.id,t.program_name,t.machine_code,t.task_type,t.deviation,t.seg_count,t.finish_time,t.create_time,t.status,t.update_time,u.name create_user_name
         from mdm_machine_back_task t left join blade_user u on t.create_user=u.id
         <where>
             t.is_deleted=0
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/service/MachineBackTaskService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/service/MachineBackTaskService.java
index 2108f2a..1192b33 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/service/MachineBackTaskService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/service/MachineBackTaskService.java
@@ -6,6 +6,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.mp.base.BizServiceImpl;
 import org.springblade.core.mp.support.Condition;
+import org.springblade.mdm.gkw.programnode.vo.ProgramNameVO;
 import org.springblade.mdm.gkw.task.entity.MachineBackTask;
 import org.springblade.mdm.gkw.task.mapper.MachineBackTaskMapper;
 import org.springblade.mdm.gkw.task.vo.MachineBackTaskQueryVO;
@@ -13,8 +14,10 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Optional;
+
 /**
- * 鏈哄簥鏂囦欢
+ * 鏈哄簥鍥炰紶浠诲姟
  *
  * @author yangys
  */
@@ -29,4 +32,16 @@
 	}
 
 
+	/**
+	 * 鏍规嵁绋嬪簭鍚嶇粨鏋勮幏鍙栦换鍔℃暟鎹�
+	 * @param vo 绋嬪簭鍚峍O
+	 * @param deviation 涓存椂鏇存敼鍗曞彿
+	 * @return 鍥炰紶浠诲姟鑲綋/or null
+	 */
+	public MachineBackTask queryMatchTaskByProgramName(ProgramNameVO vo,String deviation) {
+		Optional<MachineBackTask> optTask = lambdaQuery().eq(MachineBackTask::getProgramName,vo.logicProgramName()).eq(vo.getLgPart()!=null,MachineBackTask::getDeviation,deviation)
+		.eq(MachineBackTask::getStatus,MachineBackTask.STATUS_PENDING).last("limit 1").oneOpt();
+
+		return optTask.orElse(null);
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/vo/MachineBackTaskQueryVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/vo/MachineBackTaskQueryVO.java
index f368d2c..1b72209 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/vo/MachineBackTaskQueryVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/task/vo/MachineBackTaskQueryVO.java
@@ -16,6 +16,8 @@
 	private String programName;
 	@Schema(description = "鏈哄簥缂栫爜")
 	private String machineCode;
+	@Schema(description = "浠诲姟鐘舵��")
+	private Integer status;
 	@Schema(description = "鍒涘缓鏃堕棿寮�濮�")
 	@DateTimeFormat(pattern = "yyyy-MM-dd")
 	private LocalDate createTimeBegin;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineAcceptedFileHandleController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineAcceptedFileHandleController.java
index a8c74b5..b6a0dcf 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineAcceptedFileHandleController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineAcceptedFileHandleController.java
@@ -25,6 +25,7 @@
 import org.springblade.mdm.machinefile.vo.MachineBackFileHandleExcelVO;
 import org.springblade.mdm.machinefile.vo.MachineAcceptedFileHandleQueryVO;
 import org.springblade.mdm.machinefile.vo.MachineAcceptedFileVO;
+import org.springblade.mdm.program.service.programannotation.AnnotationUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -99,25 +100,20 @@
 		ExcelUtil.export(response, "鏈哄簥鍥炰紶绋嬪簭" + DateUtil.time(), "鏈哄簥鍥炰紶绋嬪簭琛�", list, MachineBackFileHandleExcelVO.class);
 	}
 
-	String parseProgramStatusName(Integer programStatus){
+	/**
+	 * 杞崲鐘舵�佷负鏄剧ず鏂囨湰
+	 * @param programStatus 绋嬪簭鐘舵�佺紪鐮�
+	 * @return 鐘舵�佸悕绉�
+	 */
+	String parseProgramStatusName(String programStatus){
 		if(programStatus == null){
 			return "鏈煡";
 		}
-		String txt;
-
-		switch(programStatus){
-			case 1:
-				txt = "璇曞垏";
-				break;
-			case 2:
-				txt = "鍥哄寲";
-				break;
-			case 3:
-				txt = "涓存椂鏇存敼鍗�";
-				break;
-			default:
-				txt = "鏈煡";
-		}
-		return txt;
+		return switch (programStatus) {
+			case AnnotationUtil.SQ -> "璇曞垏";
+			case AnnotationUtil.GH -> "鍥哄寲";
+			case AnnotationUtil.LG -> "涓存椂鏇存敼鍗�";
+			default -> "鏈煡";
+		};
 	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineCollectFileController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineCollectFileController.java
index b9935e3..038a3cf 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineCollectFileController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineCollectFileController.java
@@ -43,7 +43,7 @@
 			service.accept(ids);
 			return R.success();
 		}catch(Exception e) {
-			log.error("鎺ュ彈鏂囦欢寮傚父",e);
+			log.error("鎺ュ彈閫変腑鏂囦欢寮傚父",e);
 			return R.fail(e.getMessage());
 		}
 	}
@@ -55,7 +55,7 @@
 			service.acceptAll();
 			return R.success();
 		}catch(Exception e) {
-			log.error("鎺ュ彈鏂囦欢寮傚父",e);
+			log.error("鎺ュ彈鍏ㄩ儴鏂囦欢寮傚父",e);
 			return R.fail(e.getMessage());
 		}
 	}
@@ -81,14 +81,13 @@
 	@Operation(summary = "鏈哄簥鏂囦欢TEMP鐩綍鍒嗛〉鏌ヨ", description = "鍑荤┛鏂囦欢鍒嗛〉鏌ヨ锛屾煡璇㈢洰褰曚腑鐨勬枃浠讹紝杩樹笉绠楁椂鏈哄簥鍥炰紶鏂囦欢")
 	@GetMapping("/file-page-for-acceept")
 	public R<IPage<MachineFile>> filePageForAccept(MachineBackFileQueryVO query) {
-		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());
+			List<Long> deptIds = new ArrayList<>(depts.stream().map(MdmDept::getId).toList());
 			deptIds.add(dept.getId());
 			//+鏈溅闂�
 			//Func.toStrList(",",idStr)
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineFileController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineFileController.java
index 4265b29..8884570 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineFileController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineFileController.java
@@ -92,6 +92,18 @@
 		return R.success();
 	}
 
+	@PostMapping("/change-file-name")
+	@Operation(summary = "淇濆瓨鏈哄簥鏂囦欢", description = "淇濆瓨鏈哄簥鏂囦欢鍒扮鐩�")
+	public R<Void> changeFileName(Long id,String name) {
+		try {
+			machineFileService.changeName(id,name);
+		} catch (Exception e) {
+			log.error(e.getMessage());
+			return R.fail(e.getMessage());
+		}
+		return R.success();
+	}
+
 	@GetMapping("/file-his-page")
 	@Operation(summary = "淇敼鐣欏巻鍙插垪琛�", description = "淇敼鐣欏巻鍙插垪琛�")
 	public R<IPage<MachineFileChangeHisVO>> changeHisPage(MachineFileChangeHisQueryVO query) {
@@ -100,7 +112,7 @@
 
 	@GetMapping("/his-compare")
 	@Operation(summary = "瀵规瘮鍘嗗彶鏂囦欢鍐呭", description = "瀵规瘮鍘嗗彶鏂囦欢鍐呭")
-	public R<CompareDataVO> machineFileSave(Long id) {
+	public R<CompareDataVO> historyCompare(Long id) {
 		try {
 			CompareDataVO vo =machineFileService.queryHisContentForCompare(id);
 			return R.data(vo);
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/FileSendRecord.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/FileSendRecord.java
index dd5d532..631af18 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/FileSendRecord.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/FileSendRecord.java
@@ -40,6 +40,11 @@
 	 * 绋嬪簭鐘舵��
 	 */
 	private String programStatus;
+
+	/**
+	 * 涓存椂鏇存敼鍗曞彿
+	 */
+	//private String deviation;
 	/**
 	 * 鐢熸垚鏂囦欢澶у皬鐨勬樉绀烘枃鏈�
 	 * @return 鏄剧ず鏂囨湰
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineAcceptedFile.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineAcceptedFile.java
index 9cc4a2e..edc8a6e 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineAcceptedFile.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineAcceptedFile.java
@@ -34,4 +34,8 @@
 	 */
 	private String ossName;
 
+	/**
+	 * 鍥炰紶浠诲姟id
+	 */
+	private Long backTaskId;
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java
index bb88141..3f6f28f 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java
@@ -62,6 +62,10 @@
 	 */
 	public static final String DIR_TYPE_TEMP = "TEMP";
 	/**
+	 * PROGRAM鐩綍(铏氭嫙锛屾棤瀹為檯鏂囦欢澶�)
+	 */
+	public static final String DIR_TYPE_PROGRAM = "PROGRAM";
+	/**
 	 * 鏂囦欢寮傚父绫诲瀷锛氭甯�
 	 */
 	public static final int EXCEPTION_OK = 0;
@@ -92,16 +96,12 @@
 	 * 涓嶅尮閰嶄笅鍙戣褰曚复鏃舵洿鏀瑰崟閮ㄥ垎
 	 */
 	public static final int EXCEPTION_NOT_MATCH_SEND_LG = 6;
+
 	/**
 	 * 鏂囦欢鍚�
 	 */
 	private String name;
 
-
-	/**
-	 * 鑺傜偣绫诲瀷锛氬瓧鍏�
- 	 */
-	//private String nodeType;
 
 	/**
 	 * 鎵�灞炴満搴�
@@ -129,20 +129,32 @@
 	private Long fileSize;
 
 	/**
+	 * 绋嬪簭鐘舵��
+	 */
+	private String programStatus;
+
+	/**
+	 * 涓存椂鏇存敼鍗曞彿,SQ/GH/LG 鍏朵粬鍊奸兘鏄湭鐭�
+	 */
+	private String deviation;
+	/**
+	 * 涓存椂鏇存敼鍗曞彿搴忓彿,P鍚庨潰鐨勯儴鍒�
+	 */
+	private String deviationSerial;
+	/**
 	 * 纭鏃堕棿锛屾帴鍙楁垨鑰呮嫆缁濈殑鏃堕棿
 	 */
 	private Date determineTime;
-	/**
-	 * 绋嬪簭鐘舵�侊紙1璇曞垏锛�2鍥哄寲锛�3鍋忕锛�4鏈煡锛�
-	 */
-	private Integer programStatus;
 
 	/**
 	 * REC鐩綍鏂囦欢寮傚父绫诲瀷锛�0/null:姝e父; 1闈炴枃鏈牸寮忥紱2:鏂囦欢鍚嶆牸寮忎笉鍚堟硶锛�3:鏂囦欢纭け(娈垫暟涓嶅)锛�4:鏂囦欢娈垫暟涓庝笅鍙戣褰曚笉鍖归厤锛堣溅搴�/鐜板満缂栧埗闄ゅ)
 	 */
 	private Integer exceptionType;
 
-
+	/**
+	 * oss鏂囦欢鍚嶏紝鐢ㄤ簬program鏂囦欢澶�
+	 */
+	private String ossName;
 	/**
 	 * 鐢熸垚鏂囦欢澶у皬鐨勬樉绀烘枃鏈�
 	 * @return 鏄剧ず鏂囨湰
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/events/ExportedToInnerEvent.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/events/ExportedToInnerEvent.java
new file mode 100644
index 0000000..c49db60
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/events/ExportedToInnerEvent.java
@@ -0,0 +1,23 @@
+package org.springblade.mdm.machinefile.events;
+
+import org.springblade.mdm.machinefile.entity.MachineAcceptedFile;
+import org.springframework.context.ApplicationEvent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class ExportedToInnerEvent extends ApplicationEvent {
+	/**
+	 * 瀵煎嚭鐨勬帴鍙楁枃浠秈d
+	 */
+	private List<MachineAcceptedFile> acceptedFiles;
+	public ExportedToInnerEvent(Object source,List<MachineAcceptedFile> acceptedFileList) {
+		super(source);
+		this.acceptedFiles = acceptedFileList;
+	}
+
+	public List<MachineAcceptedFile> getAcceptedFiles() {
+		return acceptedFiles;
+	}
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/listeners/ExportToInnerListener.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/listeners/ExportToInnerListener.java
new file mode 100644
index 0000000..66e333b
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/listeners/ExportToInnerListener.java
@@ -0,0 +1,85 @@
+package org.springblade.mdm.machinefile.listeners;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.mdm.flow.entity.MesSync;
+import org.springblade.mdm.flow.entity.TaskDispatch;
+import org.springblade.mdm.flow.excution.events.CureFinishedEvent;
+import org.springblade.mdm.flow.service.MesSyncService;
+import org.springblade.mdm.flow.service.TaskDispatchService;
+import org.springblade.mdm.machinefile.entity.MachineAcceptedFile;
+import org.springblade.mdm.machinefile.entity.MachineFile;
+import org.springblade.mdm.machinefile.events.ExportedToInnerEvent;
+import org.springblade.mdm.machinefile.service.MachineAcceptedFileService;
+import org.springblade.mdm.machinefile.service.MachineFileService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * 鍥哄寲娴佺▼鎵ц瀹屾垚鍚庯紝闇�瑕佸鐞嗙殑浜嬩欢锛氬叆搴搈es鍚屾琛�
+ */
+@Slf4j
+@Component
+public class ExportToInnerListener {
+	@Autowired
+	private MachineFileService machineFileService;
+	@Autowired
+	private MachineAcceptedFileService machineAcceptedService;
+
+	@EventListener(value = ExportedToInnerEvent.class)
+	public void hello(ExportedToInnerEvent event) {
+		//宸茬粡瀵煎嚭鍒版秹瀵嗙綉浜嬩欢锛屾鏌ユ槸鍚︽湁瀵煎嚭鐨勭幇鍦虹紪绋嬫暟鎹�傚鏋滄湁鍒欏姞鍏rogram鏂囦欢澶�
+		if(Func.isEmpty(event.getAcceptedFiles())){
+			return;
+		}
+		List<MachineFile> onMachineFiles = machineAcceptedService.exportedProgramOnMachineFiles(event.getAcceptedFiles());
+
+		//淇濆瓨鍏rogram
+		saveOrUpdateToProgramFolder(onMachineFiles,event.getAcceptedFiles());
+	}
+
+	/**
+	 * 鏇存柊鎴栫垎绮楁枃浠跺埌program鏂囦欢澶�
+	 * @param onMachineFiles 鐜板満缂栫▼鏂囦欢鍒楄〃
+	 * @param acceptedFiles 瀵煎嚭娑夊瘑缃戠殑鏂囦欢鍒楄〃
+	 */
+	void saveOrUpdateToProgramFolder(List<MachineFile> onMachineFiles,List<MachineAcceptedFile> acceptedFiles){
+
+		for(MachineFile machineFile : onMachineFiles){
+			Optional<MachineAcceptedFile> accFileOpt = acceptedFiles.stream().filter(a -> a.getMachineFileId().equals(machineFile.getId())).findFirst();
+			if(accFileOpt.isEmpty()){
+				continue;
+			}
+
+			MachineFile existsFile = machineFileService.getByNameAndMachineInDir(machineFile.getName(),machineFile.getMachineCode(),MachineFile.DIR_TYPE_PROGRAM);
+			if(existsFile != null){
+				BeanUtils.copyProperties(machineFile,existsFile);
+
+				existsFile.setDirType(MachineFile.DIR_TYPE_PROGRAM);
+				existsFile.setOssName(accFileOpt.get().getOssName());
+				existsFile.setStatus(MachineFile.STATUS_NORMAL);
+				existsFile.setOssName(existsFile.getOssName());
+				machineFileService.updateById(existsFile);
+			}else{
+				MachineFile newProgFile = new MachineFile();
+				BeanUtils.copyProperties(machineFile,newProgFile);
+				newProgFile.setDirType(MachineFile.DIR_TYPE_PROGRAM);
+				newProgFile.setStatus(MachineFile.STATUS_NORMAL);
+				newProgFile.setOssName(accFileOpt.get().getOssName());
+				newProgFile.setId(null);
+				machineFileService.save(newProgFile);
+			}
+		}
+
+
+	}
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineAcceptedFileMapper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineAcceptedFileMapper.java
index dd2c9bf..9727dad 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineAcceptedFileMapper.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineAcceptedFileMapper.java
@@ -3,8 +3,11 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.mp.mapper.BladeMapper;
 import org.springblade.mdm.machinefile.entity.MachineAcceptedFile;
+import org.springblade.mdm.machinefile.entity.MachineFile;
 import org.springblade.mdm.machinefile.vo.MachineAcceptedFileHandleQueryVO;
 import org.springblade.mdm.machinefile.vo.MachineAcceptedFileVO;
+
+import java.util.List;
 
 public interface MachineAcceptedFileMapper extends BladeMapper<MachineAcceptedFile> {
 
@@ -15,4 +18,5 @@
 	 * @return 鍒嗛〉鏁版嵁
 	 */
 	IPage<MachineAcceptedFileVO> handlePageQuery(IPage<MachineAcceptedFileVO> page, MachineAcceptedFileHandleQueryVO query);
+
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineAcceptedFileMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineAcceptedFileMapper.xml
index 04771c6..a0b3a95 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineAcceptedFileMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineAcceptedFileMapper.xml
@@ -22,14 +22,14 @@
 -->
     <!--鏈哄簥鍥炰紶绋嬪簭澶勭悊鍒嗛〉-->
     <select id="handlePageQuery" resultType="org.springblade.mdm.machinefile.vo.MachineAcceptedFileVO">
-        select f.id,f.name,f.oss_name,f.create_time,m.code machine_code, m.name machine_name,f.create_time,mf.program_status,mf.file_create_time,f.export_time,f.create_time
+        select f.id,f.name,f.oss_name,f.create_time,m.code machine_code, m.name machine_name,f.status,f.create_time,mf.program_status,mf.file_create_time,f.export_time,f.create_time
         from mdm_machine_accepted_file f
             left join mdm_machine_file mf on f.machine_file_id=mf.id
         left join mdm_machine m on mf.machine_code=m.code
         <where>
-        f.status=#{query.status} and f.is_deleted=0
+        f.is_deleted=0
         <if test="query.status!=null and query.status!=''">
-            and f.status like #{query.status}
+            and f.status=#{query.status}
         </if>
         <if test="query.name!=null and query.name!=''">
             <bind name="fname" value="'%'+query.name+'%'"/>
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml
index c680a65..9d7b48a 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml
@@ -65,7 +65,7 @@
     -->
     <!--宸ユ帶缃戦椤垫枃浠舵煡璇�-->
     <select id="pageQuery" resultType="org.springblade.mdm.machinefile.entity.MachineFile">
-        select f.id,f.name,f.machine_code,f.file_create_time, f.file_modify_time,f.md5,f.file_size,f.create_time,f.update_time
+        select f.id,f.name,f.machine_code,f.dir_type,f.file_create_time, f.file_modify_time,f.md5,f.oss_name,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 and f.status &lt;&gt; 4
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineAcceptedFileService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineAcceptedFileService.java
index bd0865a..08ad5a8 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineAcceptedFileService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineAcceptedFileService.java
@@ -7,12 +7,22 @@
 import org.springblade.core.oss.OssTemplate;
 import org.springblade.core.oss.model.BladeFile;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.basesetting.machine.service.MachineService;
+import org.springblade.mdm.gkw.programnode.vo.ProgramNameVO;
+import org.springblade.mdm.gkw.task.entity.MachineBackTask;
+import org.springblade.mdm.gkw.task.service.MachineBackTaskService;
 import org.springblade.mdm.machinefile.entity.MachineFile;
 import org.springblade.mdm.machinefile.entity.MachineAcceptedFile;
 import org.springblade.mdm.machinefile.mapper.MachineAcceptedFileMapper;
 import org.springblade.mdm.machinefile.vo.MachineAcceptedFileHandleQueryVO;
 import org.springblade.mdm.machinefile.vo.MachineBackFileQueryVO;
 import org.springblade.mdm.machinefile.vo.MachineAcceptedFileVO;
+import org.springblade.mdm.program.service.programannotation.AnnotationData;
+import org.springblade.mdm.program.service.programannotation.AnnotationProcessor;
+import org.springblade.mdm.program.service.programannotation.AnnotationProcessorHelper;
+import org.springblade.mdm.utils.ProgramFileNameParser;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -20,16 +30,24 @@
 import java.io.InputStream;
 import java.nio.file.Files;
 import java.nio.file.Paths;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
-@AllArgsConstructor
+
 @Service
 public class MachineAcceptedFileService extends BizServiceImpl<MachineAcceptedFileMapper, MachineAcceptedFile> {
-	private final MachineFileService machineFileService;
-	private final OssTemplate ossTemplate;
+	@Autowired
+	private MachineFileService machineFileService;
+	@Autowired
+	private OssTemplate ossTemplate;
+	@Autowired
+	private MachineBackTaskService machineBackTaskService;
+	@Autowired
+	private AnnotationProcessorHelper annotationProcessorHelper;
 	/**
 	 * 鎺ュ彈
-	 * @param ids
+	 * @param ids  閫夊畾鎺ュ彈鐨刬d锛岄�楀彿鍒嗛殧
 	 */
 	@Transactional
 	public void accept(String ids) throws IOException {
@@ -43,7 +61,7 @@
 
 	/**
 	 * 鎷掔粷
-	 * @param ids
+	 * @param ids 閫夊畾鎷掔粷鐨刬d锛岄�楀彿鍒嗛殧
 	 */
 	public void reject(String ids) {
 		List<Long> idList = Func.toLongList(ids);
@@ -72,7 +90,7 @@
 	/**
 	 * 鎺ユ敹鏂囦欢
 	 * @param machineFileId 鏈哄簥鏂囦欢id
-	 * @throws IOException
+	 * @throws IOException 鏂囦欢鎿嶄綔寮傚父
 	 */
 	void acceptFile(Long machineFileId) throws IOException {
 		MachineFile machineFile = machineFileService.getById(machineFileId);
@@ -88,7 +106,25 @@
 			BladeFile bfile = ossTemplate.putFile(machineFile.getName(),inputStream);
 			machineAcceptedFile.setOssName(bfile.getName());
 		}
+		try(InputStream inputStream = Files.newInputStream(Paths.get(fullPath));){
+			//閮芥暟鎹�
+			//Machine machine = this.machineService.getByCode(record.getMachineCode());
+			//AnnotationProcessor processor = annotationProcessorHelper.getProcessor(machine.getControlSystem());
+			//AnnotationData annotationData = processor.readAnnotationData(inputStream);
+			machineAcceptedFile.setBackTaskId(getMachineBackTaskId(machineAcceptedFile.getName(),machineFile.getDeviation()));
+		}
+
 		save(machineAcceptedFile);
+	}
+
+	Long getMachineBackTaskId(String filename,String deviation){
+		ProgramNameVO vo = ProgramFileNameParser.parseProgramName(filename);
+		MachineBackTask task = machineBackTaskService.queryMatchTaskByProgramName(vo,deviation);
+		if(task != null){
+			return task.getId();
+		}else{
+			return null;
+		}
 	}
 
 	/**
@@ -101,5 +137,30 @@
 		return  this.getBaseMapper().handlePageQuery(Condition.getPage(query),query);
 	}
 
+	/**
+	 * 鏍规嵁瀵煎嚭鐨勬帴鍙楁枃浠秈d锛岃幏鍙栧叾涓幇鍦虹紪绋嬬殑MachineFIle
+	 * @param acceptedFiles  瀵煎嚭鐨勬帴鍙楁枃浠跺垪琛�
+	 * @return machineFile
+	 */
+	public List<MachineFile> exportedProgramOnMachineFiles(List<MachineAcceptedFile> acceptedFiles) {
 
+		List<Long> backTaskIds = acceptedFiles.stream().map(MachineAcceptedFile::getBackTaskId).filter(Objects::nonNull).toList();
+
+		//鐜板満缂栫▼鐨勪换鍔¢泦鍚�
+		//List<MachineBackTask> onMachineTasks1 = machineBackTaskService.lambdaQuery().in(MachineBackTask::getId, backTaskIds).list();
+		List<MachineBackTask> onMachineTasks = machineBackTaskService.lambdaQuery()
+			.eq(MachineBackTask::getTaskType,MachineBackTask.TASK_TYPE_ON_MACHINE)
+			.in(MachineBackTask::getId, backTaskIds).list();
+
+		List<Long> onMachineFileIds = new ArrayList<>();
+		for(MachineAcceptedFile accFile : acceptedFiles){
+			for(MachineBackTask backTask : onMachineTasks){
+				if(backTask.getId().equals(accFile.getBackTaskId())){
+					onMachineFileIds.add(accFile.getMachineFileId());
+				}
+			}
+		}
+
+		return machineFileService.lambdaQuery().in(MachineFile::getId,onMachineFileIds).list();
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileScanService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileScanService.java
index cd052da..d4877d2 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileScanService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileScanService.java
@@ -1,18 +1,18 @@
 package org.springblade.mdm.machinefile.service;
 
+import com.alibaba.excel.util.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.mdm.basesetting.machine.service.MachineService;
 import org.springblade.mdm.basesetting.machine.entity.Machine;
 import org.springblade.mdm.commons.service.ParamService;
+import org.springblade.mdm.gkw.programnode.vo.ProgramNameVO;
 import org.springblade.mdm.machinefile.entity.MachineFile;
 import org.springblade.mdm.program.service.ProgramAnnotationService;
-import org.springblade.mdm.program.service.programannotation.AnnotationProcessor;
-import org.springblade.mdm.program.service.programannotation.AnnotationUtil;
-import org.springblade.mdm.program.service.programannotation.MachineAnnotationConfig;
-import org.springblade.mdm.program.service.programannotation.ProcessorHelper;
+import org.springblade.mdm.program.service.programannotation.*;
 import org.springblade.mdm.utils.FileContentUtil;
+import org.springblade.mdm.utils.ProgramFileNameParser;
 import org.springblade.system.pojo.entity.DictBiz;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
@@ -37,12 +37,11 @@
 	@Autowired
 	private MachineService machineService;
 	@Autowired
-	private ParamService paramService;
-	@Autowired
 	private ProgramAnnotationService programAnnotationService;
 	@Autowired
 	private MachineAnnotationConfig annoConfig;
-
+	@Autowired
+	private AnnotationProcessorHelper annotationProcessorHelper;
 	/**
 	 * 鎵弿鎵�鏈夋満搴婄殑閰嶇疆鐩綍
 	 */
@@ -142,7 +141,7 @@
 		mf.setName(filePath.toFile().getName());
 		mf.setDirType(dirType);
 		mf.setMachineCode(machine.getCode());
-		mf.setProgramStatus(readProgramStatus(filePath,machine.getMachineGroupCode(),annotatiionList));
+
 
 		BasicFileAttributes attrs = Files.readAttributes(
 			filePath,
@@ -166,7 +165,16 @@
 			log.error("璇诲彇鏂囦欢md5澶辫触",e);
 			throw new ServiceException("璇诲彇鏂囦欢md5澶辫触"+e.getMessage());
 		}
+		try (InputStream inputStream = Files.newInputStream(filePath)) {
+			AnnotationProcessor annoProcessor = annotationProcessorHelper.getProcessor(machine.getMachineGroupCode());
+			AnnotationData annoData = annoProcessor.readAnnotationData(inputStream);
+			mf.setProgramStatus(annoData.getProgramStatus());
 
+			ProgramNameVO progVO = ProgramFileNameParser.parseProgramName(mf.getName());
+			if(StringUtils.isNotBlank(progVO.getLgPart())) {
+				mf.setDeviation(annoData.getDeviation());
+			}
+		}
 		return mf;
 	}
 	/**
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileService.java
index f0414b3..b7a0762 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileService.java
@@ -30,6 +30,7 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Optional;
 
 /**
  * 鏈哄簥鏂囦欢
@@ -246,4 +247,19 @@
     public IPage<MachineFile> exceptionFilePageQuery(MachineFileExceptionQueryVO query) {
 		return baseMapper.exceptionFilePageQuery(Condition.getPage(query),query);
     }
+
+	/**
+	 * 淇敼鏂囦欢鍚嶆垚
+	 * @param id 鏂囦欢id
+	 * @param name 鏂板悕绉�
+	 */
+	public void changeName(Long id, String name) {
+
+	}
+
+	public MachineFile getByNameAndMachineInDir(String name, String machineCode, String dirType) {
+		Optional<MachineFile> optFIle = this.lambdaQuery().eq(MachineFile::getName, name).eq(MachineFile::getMachineCode, machineCode)
+			.eq(MachineFile::getDirType, dirType).eq(MachineFile::getStatus, MachineFile.STATUS_NORMAL).oneOpt();
+		return optFIle.orElse(null);
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java
index 2d6b432..26e4aac 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java
@@ -9,10 +9,15 @@
 import org.springblade.core.mp.base.BizServiceImpl;
 import org.springblade.core.oss.OssTemplate;
 import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.SpringUtil;
 import org.springblade.mdm.basesetting.machine.entity.Machine;
 import org.springblade.mdm.basesetting.machine.service.MachineService;
+import org.springblade.mdm.flow.excution.events.CureFinishedEvent;
+import org.springblade.mdm.gkw.task.entity.MachineBackTask;
+import org.springblade.mdm.gkw.task.service.MachineBackTaskService;
 import org.springblade.mdm.machinefile.entity.MachineAcceptedFile;
 import org.springblade.mdm.machinefile.entity.MachineFile;
+import org.springblade.mdm.machinefile.events.ExportedToInnerEvent;
 import org.springblade.mdm.program.entity.NcProgramExchange;
 import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
 import org.springblade.mdm.program.service.ProgramAnnotationService;
@@ -45,6 +50,8 @@
 	private final MachineService machineService;
 	private final AnnotationProcessorHelper annotationProcessorHelper;
 	private final ProgramAnnotationService programAnnotationService;
+
+	private final MachineBackTaskService machineBackTaskService;
 	/**
 	 * 瀵煎嚭鍒版秹瀵嗙綉
 	 * @param acceptedFileIds
@@ -54,9 +61,8 @@
 	@Transactional
 	public void exportToInner(List<Long> acceptedFileIds, ServletOutputStream os) throws IOException {
 
+		List<MachineAcceptedFile> acceptedFiles = machineAcceptedService.lambdaQuery().in(MachineAcceptedFile::getId,acceptedFileIds).list();
 		try (ZipOutputStream zipOut = new ZipOutputStream(os);) {//os
-
-			List<MachineAcceptedFile>  acceptedFiles = machineAcceptedService.lambdaQuery().in(MachineAcceptedFile::getId,acceptedFileIds).list();
 			Map<String,List<MachineAcceptedFile>> map =  acceptedFiles.stream()
 				.collect(Collectors.groupingBy(s -> ProgramFileNameParser.parseProgramName(s.getName()).logicProgramName()));
 
@@ -75,9 +81,31 @@
 			}
 
 			machineAcceptedService.updateBatchById(acceptedFiles);
+
+			//鏇存柊浠诲姟鐘舵��
+			List<Long> backTaskIdList = acceptedFiles.stream().map(MachineAcceptedFile::getBackTaskId).filter(Objects::nonNull).toList();
+			this.finishTask(backTaskIdList);
+
+			SpringUtil.publishEvent(new ExportedToInnerEvent("exportToInner",acceptedFiles));
 		}
 
 		os.close();
+
+
+	}
+
+	void finishTask(List<Long> backTaskIdList){
+		if(backTaskIdList.isEmpty()){
+			return;
+		}
+		List<MachineBackTask> tasks = machineBackTaskService.lambdaQuery().in(MachineBackTask::getId,backTaskIdList).list();
+		for(MachineBackTask backTask : tasks){
+			backTask.setStatus(MachineBackTask.STATUS_FINISHED);
+			backTask.setFinishTime(new Date());
+
+			machineBackTaskService.updateById(backTask);
+		}
+
 	}
 
 	/**
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java
index c955ac7..e5fe6bc 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java
@@ -73,7 +73,6 @@
 				//闈炴枃鏈�
 				excepType = MachineFile.EXCEPTION_NOT_TEXT;
 			}else{
-				//Matcher matcher = RegExpConstants.PROGRAM_FILE_PATTERN.matcher(machineFile.getName());
 				ProgramNameVO progNameVO =  ProgramFileNameParser.parseProgramName(machineFile.getName());
 				boolean filenameValid = progNameVO.isValidFilename();
 				if(!filenameValid){
@@ -85,19 +84,18 @@
 					if(matchCount != progNameVO.getSegmentCount()){//鏂囦欢娈垫暟缂哄け
 						excepType = MachineFile.EXCEPTION_LOST_FILES;
 					}else{
+						//妫�鏌ユ槸鍚﹀尮閰嶆満搴婂洖浼犱换鍔★紵
+
 						//妫�鏌ユ槸鍚﹀尮閰嶄笅鍙戣褰曠殑娈垫暟
-						//姝h礋3绉掍綔涓烘煡璇㈡椂闂�
-						//Date beginTime = new Date(machineFile.getFileCreateTime().getTime()-3000);
-						//Date endTime = new Date(machineFile.getFileCreateTime().getTime()+3000);
-						String likeStr;
+						String nameLikeStr;
 						if(StringUtils.isNotBlank(progNameVO.getLgPart())){
-							likeStr = prefix +"%P%";
+							nameLikeStr = prefix +"%P%";
 						}else{
-							likeStr = prefix;
+							nameLikeStr = prefix;
 						}
 						Optional<FileSendRecord> optFile = fileSendRecordService.lambdaQuery()
 							.eq(FileSendRecord::getMachineCode,machineFile.getMachineCode())
-							.likeRight(FileSendRecord::getName,likeStr).last("limit 1")
+							.likeRight(FileSendRecord::getName,nameLikeStr).last("limit 1")
 							.orderByDesc(FileSendRecord::getCreateTime).oneOpt();
 
 						boolean matchSendRecord;//鏂囦欢鏄惁鏈変笅鍙戣褰�
@@ -118,17 +116,6 @@
 
 						if(!matchSendRecord){//濡傛灉鏂囦欢鏈笅鍙戣繃锛屾煡鐪嬫槸鍚︽湁鐜板満缂栫▼璁板綍
 							byteStream.reset();
-
-							/*
-							String planStatusLine = AnnotationUtil.removeAnnotation(machine.getControlSystem(),FileContentUtil.readLineAt(byteStream,annoProps.getStatusLineIndex()),programAnnotationService.getAnnotionDictList());
-
-							String lgNo;//鏇存敼鍗曞彿
-							if(AnnotationUtil.LG.equals(planStatusLine)) {//鏄洿鏀瑰崟
-								String lgLine = FileContentUtil.readLineAt(byteStream, annoProps.getDeviationLineIndex());
-								lgNo = AnnotationUtil.removeAnnotation(machine.getControlSystem(), lgLine, programAnnotationService.getAnnotionDictList());
-							}else{
-								lgNo = null;
-							}*/
 
 							String devSerial = null;
 							if(StringUtils.isNotBlank(progNameVO.getLgPart())){
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/MachineAcceptedFileVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/MachineAcceptedFileVO.java
index 294ee7e..2c698ff 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/MachineAcceptedFileVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/MachineAcceptedFileVO.java
@@ -18,7 +18,7 @@
 	@Schema(description = "绋嬪簭缂栧彿")
 	private String code;
 	@Schema(description = "绋嬪簭鐘舵��")
-	private Integer programStatus;
+	private String programStatus;
 	@Schema(description = "鏂囦欢鍒拌揪鏃堕棿")
 	private Date fileCreateTime;
 	@Schema(description = "瀵煎嚭鏃堕棿")
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 903ee60..75c8c24 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
@@ -1,6 +1,7 @@
 
 package org.springblade.mdm.program.service;
 
+import jodd.util.annotation.AnnotationParser;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.io.FileUtils;
@@ -18,14 +19,17 @@
 import org.springblade.mdm.commons.contants.RegExpConstants;
 import org.springblade.mdm.commons.contants.ZipConstants;
 import org.springblade.mdm.gkw.programnode.vo.ProgramNameVO;
+import org.springblade.mdm.gkw.task.entity.MachineBackTask;
+import org.springblade.mdm.gkw.task.service.MachineBackTaskService;
 import org.springblade.mdm.machinefile.entity.FileSendRecord;
 import org.springblade.mdm.machinefile.service.FileSendRecordService;
 import org.springblade.mdm.program.entity.NcProgramExchange;
 import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
-import org.springblade.mdm.program.service.programannotation.AnnotationProperties;
+import org.springblade.mdm.program.service.programannotation.*;
 import org.springblade.mdm.program.vo.MdmProgramImportVO;
 import org.springblade.mdm.utils.FileContentUtil;
 import org.springblade.mdm.utils.ProgramFileNameParser;
+import org.springblade.system.pojo.entity.DictBiz;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
@@ -61,6 +65,11 @@
 	private FileSendRecordService fileSendRecordService;
 	@Autowired
 	private OssTemplate ossTemplate;
+	@Autowired
+	private AnnotationProcessorHelper annotationProcessorHelper;
+	@Autowired
+	private MachineBackTaskService machineBackTaskService;
+
 	private String getFileKey(){
 		return "mdmgkwimpfile-"+ AuthUtil.getUserId();
 	}
@@ -369,6 +378,7 @@
 		Path extractDir = Paths.get(dictStr);
 		List<MdmProgramImportVO> list = readTempDir(extractDir);
 
+		List<DictBiz> annoDictList = programAnnotationService.getAnnotionDictList();
 		String destFileFull;
 		for(String str : idList){
 			Optional<MdmProgramImportVO> optVO = list.stream().filter(vo -> vo.getId().equals(str)).findFirst();
@@ -394,10 +404,57 @@
 				BladeFile bFile = ossTemplate.putFile(record.getName(), inputStream);
 				record.setOssName(bFile.getName());
 			}
+
+			try(InputStream inputStream = ossTemplate.statFileStream(record.getOssName())){
+				//璇诲彇绋嬪簭鐘舵��
+				Machine machine = this.machineService.getByCode(record.getMachineCode());
+				AnnotationProcessor processor = annotationProcessorHelper.getProcessor(machine.getControlSystem());
+				AnnotationData annotationData = processor.readAnnotationData(inputStream);
+				/*
+				ProgramNameVO nameVO = ProgramFileNameParser.parseProgramName(record.getName());
+				if(StringUtils.isNotBlank(nameVO.getLgPart())) {
+					record.setDeviation(annotationData.getDeviation());
+				}*/
+				record.setProgramStatus(annotationData.getProgramStatus());
+			}
 			fileSendRecordService.save(record);
 
 			importedRecords.add(record);
 		}
 
+		machineBackTaskService.saveBatch(parseMachineBackTask(importedRecords));
+	}
+
+	/**
+	 * 鍒涘缓鏈哄簥鍥炰紶浠诲姟
+	 * @param importedRecords
+	 */
+	List<MachineBackTask> parseMachineBackTask(List<FileSendRecord>  importedRecords){
+		List<FileSendRecord> recList = importedRecords.stream().filter(r ->{
+			return AnnotationUtil.SQ.equals(r.getProgramStatus())
+				|| AnnotationUtil.LG.equals(r.getProgramStatus());}).toList();
+
+		Map<String,FileSendRecord> map = new HashMap<>();
+		for(FileSendRecord record : recList){
+			ProgramNameVO nameVO = ProgramFileNameParser.parseProgramName(record.getName());
+			String key = record.getMachineCode()+","+nameVO.logicProgramName();
+			map.put(key,record);
+		}
+
+		List<MachineBackTask> backTasks = new ArrayList<>();
+		for(String key : map.keySet()){
+			MachineBackTask task = new MachineBackTask();
+			task.setTaskType(MachineBackTask.TASK_TYPE_PROGRAM);
+
+			FileSendRecord record = map.get(key);
+			task.setMachineCode(record.getMachineCode());
+
+			ProgramNameVO nameVO = ProgramFileNameParser.parseProgramName(record.getName());
+			task.setProgramName(nameVO.logicProgramName());
+			task.setSegCount(nameVO.getSegmentCount());
+			backTasks.add(task);
+		}
+		//鎻愬彇绋嬪簭鍖呭悕锛屾満搴婄紪鐮侀泦鍚�
+		return backTasks;
 	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramOnMachineService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramOnMachineService.java
index ffd7826..003f07f 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramOnMachineService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramOnMachineService.java
@@ -10,10 +10,13 @@
 import org.springblade.core.tool.utils.BeanUtil;
 
 import org.springblade.mdm.flow.vo.ProgramOnMachineExcel;
+import org.springblade.mdm.gkw.task.entity.MachineBackTask;
+import org.springblade.mdm.gkw.task.service.MachineBackTaskService;
 import org.springblade.mdm.program.entity.ProgramOnMachine;
 import org.springblade.mdm.program.mapper.ProgramOnMachineMapper;
 import org.springblade.mdm.program.vo.ProgramOnMachineRecordQueryVO;
 import org.springblade.mdm.program.vo.ProgramOnMachineVO;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
@@ -21,14 +24,15 @@
 import java.util.*;
 
 /**
- * 鐜板満缂栫▼璁板綍澶勭悊蹇�
+ * 鐜板満缂栫▼璁板綍澶勭悊鏈嶅姟
  *
  * @author yangys
  */
 @Slf4j
 @Service
-@AllArgsConstructor
 public class ProgramOnMachineService extends BizServiceImpl<ProgramOnMachineMapper, ProgramOnMachine> {
+	@Autowired
+	private MachineBackTaskService machineBackTaskService;
 
 	@Transactional(rollbackFor = Exception.class)
 	public int importData(MultipartFile file) {
@@ -40,21 +44,44 @@
 			return progMachine;
 		}).toList();
 
-		batchSaveData(list);
-
+		List<ProgramOnMachine> savedList = batchSaveData(list);
+		machineBackTaskService.saveBatch(parseMachineBackTask(savedList));
 		return list.size();
 	}
 
 	/**
+	 * 灏嗘暟鎹浆鎹负鏈哄簥鍥炰紶浠诲姟
+	 * @param list 鐜板満缂栧埗浠诲姟
+	 * @return 鍥炰紶浠诲姟鍒楄〃
+	 */
+	List<MachineBackTask> parseMachineBackTask(List<ProgramOnMachine> list){
+		List<MachineBackTask> tasks = new ArrayList<>();
+		for(ProgramOnMachine m : list) {
+			MachineBackTask task = new MachineBackTask();
+			task.setProgramName(m.getDrawingNo()+"-"+m.getProcessNo()+"-"+m.getProcessEdition());
+			task.setMachineCode(m.getMachineCode());
+			task.setDeviation(m.getDeviation());
+			task.setTaskType(MachineBackTask.TASK_TYPE_ON_MACHINE);
+			task.setSegCount(0);//鐜板満缂栧埗涓�0
+			tasks.add(task);
+		}
+
+		return tasks;
+	}
+	/**
 	 * 鎵归噺淇濆瓨
 	 * @param list
 	 */
-	void batchSaveData(List<ProgramOnMachine> list) {
+	List<ProgramOnMachine> batchSaveData(List<ProgramOnMachine> list) {
+		List<ProgramOnMachine> savedList = new ArrayList<>();
 		for (ProgramOnMachine progOnMachine : list) {
 			if(!existsByProcessInstanceId(progOnMachine.getProcessInstanceId())){
 				save(progOnMachine);
+				savedList.add(progOnMachine);
 			}
 		}
+
+		return savedList;
 	}
 
 	/**
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java
index 7933d98..cab30c0 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java
@@ -186,4 +186,65 @@
 	}
 	public abstract String getControlSystem();
 
+	@Override
+	public AnnotationData readAnnotationData(InputStream inputStream) {
+		AnnotationData data = new AnnotationData();
+
+		int maxLineIndex = maxAnnotationLineIndex();
+		try {
+			int lineCount = maxLineIndex+1;
+			List<String> lines = FileContentUtil.readFirstNLines(inputStream,lineCount);
+			fixLine(lines,lineCount);
+
+			String programNameLine = lines.get(this.getAnnotationProperties().getProgramNameLineIndex());
+			String sendPathLine = lines.get(this.getAnnotationProperties().getSendPathLineIndex());
+			String statusLine = lines.get(this.getAnnotationProperties().getStatusLineIndex());
+			String devLine =  lines.get(this.getAnnotationProperties().getDeviationLineIndex());
+
+			List<DictBiz> annoDictList= this.programAnnotationService.getAnnotionDictList();
+			data.setFilename(AnnotationUtil.removeAnnotation(this.getControlSystem(),programNameLine,annoDictList));
+			data.setSendPath(AnnotationUtil.removeAnnotation(this.getControlSystem(),sendPathLine,annoDictList));
+
+			String statusText = AnnotationUtil.removeAnnotation(this.getControlSystem(),statusLine,annoDictList);
+			if(AnnotationUtil.isStatusContent(statusText)){
+				data.setProgramStatus(statusText);
+			}
+
+			data.setDeviation(AnnotationUtil.removeAnnotation(this.getControlSystem(),devLine,annoDictList));
+
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		}
+
+		return data;
+	}
+
+	/**
+	 * 娌℃湁鐨勮濉厖鏈┖涓�
+	 * @param lines
+	 * @return
+	 */
+	void fixLine(List<String> lines,int fixLineCount){
+		int needFix = fixLineCount - lines.size();
+		if(needFix > 0){
+			for(int i = 0 ; i < needFix ; i++){
+				lines.add(StringUtils.EMPTY);
+			}
+		}
+	}
+
+	private int maxAnnotationLineIndex(){
+		int max = this.getAnnotationProperties().getDeviationLineIndex();
+		if(max < this.getAnnotationProperties().getStatusLineIndex()){
+			max = this.getAnnotationProperties().getStatusLineIndex();
+		}
+
+		if(max < this.getAnnotationProperties().getSendPathLineIndex()){
+			max = this.getAnnotationProperties().getSendPathLineIndex();
+		}
+		if(max < this.getAnnotationProperties().getProgramNameLineIndex()){
+			max = this.getAnnotationProperties().getProgramNameLineIndex();
+		}
+		return max;
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessor.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessor.java
index 8443758..dacceda 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessor.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessor.java
@@ -20,5 +20,12 @@
 	InputStream putFilenameAnnotation(String programName, InputStream inputStream) throws IOException;
 
 	AnnotationProperties getAnnotationProperties();
-	//InputStream puttSendPathAnnotation(String programName, InputStream inputStream) throws IOException;
+
+	/**
+	 * 浠庤緭鍏ユ祦璇诲彇鍏ㄥannotation鏁版嵁
+	 * @param inputStream 杈撳叆娴�
+	 * @return 璇诲彇鐨勬暟鎹�
+	 */
+    AnnotationData readAnnotationData(InputStream inputStream);
+    //InputStream puttSendPathAnnotation(String programName, InputStream inputStream) throws IOException;
 }
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
deleted file mode 100644
index b8ec344..0000000
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package org.springblade.mdm.task;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springblade.mdm.basesetting.machine.service.MachineService;
-import org.springblade.mdm.basesetting.machine.entity.Machine;
-import org.springblade.mdm.commons.service.ParamService;
-import org.springblade.mdm.machinefile.entity.MachineFile;
-import org.springblade.mdm.machinefile.service.MachineFileService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.StandardCopyOption;
-import java.time.LocalDateTime;
-import java.util.List;
-
-/**
- * 鏈哄簥鍥炰紶鏂囦欢澶箁ec锛岀洰褰曟枃浠惰秴杩囨満搴婅瀹氱殑鏃堕棿绉诲姩鍒皌emp鏂囦欢澶�
- */
-@Slf4j
-@Component
-@EnableScheduling
-public class ReceiveDirMoveTask {
-	@Autowired
-	private MachineFileService machineFileService;
-	@Autowired
-	private MachineService machineService;
-	@Autowired
-	private ParamService paramService;
-	/**
-	 * 鏂囦欢榛樿淇濆瓨灏忔椂鏁帮紝0涓嶉檺鍒�
-	 */
-	private static final int DEFAULT_HOUR = 0;
-
-	//@Scheduled(cron = "${task.cron.machine_rec_move:0 3 * * * ?}")
-	/*
-	public void execute() {
-		String networkType = paramService.getParamValue(ParamService.NETWORK_TYPE,ParamService.NETWORK_TYPE_SHEMI);
-
-		if(!ParamService.NETWORK_TYPE_SHEMI.equals(networkType)){
-			//闈炴秹瀵嗙綉锛屾墠鎵弿鐩綍鏂囦欢
-			moveValidateFiles();
-		}
-
-	}
-
-
-	public void moveValidateFiles() {
-		List<Machine> machines = machineService.getEnableMachines();
-		LocalDateTime now = LocalDateTime.now();
-		for (Machine machine : machines) {
-			int remainHours = machine.getReceiveDirExpiryHours() != null ?machine.getReceiveDirExpiryHours():DEFAULT_HOUR;
-
-			//LocalDateTime earlyTime = now.minusHours(remainHours);
-			List<MachineFile> pendingFiles = this.machineFileService.lambdaQuery()
-				.eq(MachineFile::getDirType,MachineFile.DIR_TYPE_REC)
-				.eq(MachineFile::getExceptionType,MachineFile.EXCEPTION_OK)
-				.eq(MachineFile::getMachineCode,machine.getCode()).list();
-//.lt(MachineFile::getFileCreateTime,earlyTime)
-
-			for(MachineFile overTimeFile : pendingFiles){
-				try {
-					moveFileToTemp(overTimeFile, machine);
-				}catch(Exception e){
-					log.error("绉诲姩rec鏂囦欢澶辫触:{}",overTimeFile.getName(),e);
-				}
-			}
-
-		}
-
-	}
-
-	private void moveFileToTemp(MachineFile overTimeFile,Machine machine) throws IOException {
-		String srcFilepath = MachineFileService.getBasePath(machine,overTimeFile.getDirType())+ File.separator+overTimeFile.getName();
-		Path source = Paths.get(srcFilepath);
-		if(!source.toFile().exists()){
-			return;
-		}
-		String targetFilepath = MachineFileService.getBasePath(machine,MachineFile.DIR_TYPE_TEMP)+ File.separator+overTimeFile.getName();
-		Path target = Paths.get(targetFilepath);
-
-		Path targetDir = target.getParent();
-		if (targetDir != null && !Files.exists(targetDir)) {
-			Files.createDirectories(targetDir);
-		}
-
-		// 浣跨敤 REPLACE_EXISTING 閫夐」鏉ヨ鐩栧凡瀛樺湪鐨勬枃浠�
-		Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);
-	}
-	*/
-}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/utils/FileContentUtil.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/utils/FileContentUtil.java
index 93b49a6..b3fa140 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/utils/FileContentUtil.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/utils/FileContentUtil.java
@@ -190,4 +190,20 @@
 		}
 		return new ByteArrayInputStream(Files.newInputStream(tempFile).readAllBytes());
     }
+
+	public static List<String> readFirstNLines(InputStream inputStream, int n) throws IOException {
+		List<String> lines = new ArrayList<>();
+
+		try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
+			String line;
+			int count = 0;
+
+			while ((line = reader.readLine()) != null && count < n) {
+				lines.add(line);
+				count++;
+			}
+		}
+
+		return lines;
+	}
 }
diff --git a/blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/MdmProgramImportServiceTest.java b/blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/MdmProgramImportServiceTest.java
index 67bc545..2528b06 100644
--- a/blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/MdmProgramImportServiceTest.java
+++ b/blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/MdmProgramImportServiceTest.java
@@ -2,11 +2,16 @@
 
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
+import org.springblade.mdm.gkw.task.entity.MachineBackTask;
+import org.springblade.mdm.machinefile.entity.FileSendRecord;
+import org.springblade.mdm.program.service.programannotation.AnnotationUtil;
 import org.springblade.mdm.program.vo.MdmProgramImportVO;
+import org.springframework.beans.BeanUtils;
 
 import java.io.IOException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Arrays;
 import java.util.List;
 
 public class MdmProgramImportServiceTest {
@@ -26,4 +31,30 @@
 		System.out.println(list);
 	}
 
+	@Test
+	public void testParseMachineBackTask()  {
+		FileSendRecord record = new FileSendRecord();
+		record.setMachineCode("123");
+		record.setName("T-A-B-1-1.txt");
+		record.setProgramStatus(AnnotationUtil.SQ);
+
+		MdmProgramImportService service= new MdmProgramImportService();
+
+		List<MachineBackTask> tasks = service.parseMachineBackTask(List.of(record));
+
+		Assertions.assertEquals(1, tasks.size());
+		MachineBackTask task = tasks.get(0);
+		Assertions.assertEquals("123", task.getMachineCode());
+		Assertions.assertEquals("T-A-B",task.getProgramName());
+		Assertions.assertEquals(1,task.getSegCount());
+		FileSendRecord record2 = new FileSendRecord();
+		BeanUtils.copyProperties(task, record2);
+
+		//鐩稿悓鏁版嵁鐨勬枃浠讹紝涔熸槸涓�涓猼ask
+		tasks = service.parseMachineBackTask(List.of(record,record2));
+		Assertions.assertEquals(1, tasks.size());
+		task = tasks.get(0);
+		Assertions.assertEquals("123", task.getMachineCode());
+		Assertions.assertEquals("T-A-B",task.getProgramName());
+	}
 }

--
Gitblit v1.9.3