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/program/service/MdmProgramImportService.java |  394 ++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 239 insertions(+), 155 deletions(-)

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 9318958..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,34 +1,50 @@
 
 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;
+import org.apache.commons.io.FilenameUtils;
 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.Func;
-import org.springblade.mdm.basesetting.machine.MachineService;
+import org.springblade.mdm.basesetting.machine.service.MachineService;
 import org.springblade.mdm.basesetting.machine.entity.Machine;
+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.*;
 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.scheduling.support.SimpleTriggerContext;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.*;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.Duration;
 import java.util.*;
 import java.nio.file.*;
+import java.util.regex.Matcher;
+import java.util.stream.Stream;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 /**
@@ -39,15 +55,20 @@
 @Slf4j
 @Service
 public class MdmProgramImportService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> {
-
 	@Autowired
 	private BladeRedis bladeRedis;
-
 	@Autowired
 	private ProgramAnnotationService programAnnotationService;
-
 	@Autowired
 	private MachineService machineService;
+	@Autowired
+	private FileSendRecordService fileSendRecordService;
+	@Autowired
+	private OssTemplate ossTemplate;
+	@Autowired
+	private AnnotationProcessorHelper annotationProcessorHelper;
+	@Autowired
+	private MachineBackTaskService machineBackTaskService;
 
 	private String getFileKey(){
 		return "mdmgkwimpfile-"+ AuthUtil.getUserId();
@@ -58,41 +79,30 @@
 	 * @return
 	 */
 	public List<MdmProgramImportVO> mdmImportUpload(MultipartFile file) {
-		List<MdmProgramImportVO> list = new ArrayList<>();
+		List<MdmProgramImportVO> list;
 		try {
 			if(file == null || file.isEmpty()){
 				throw new ServiceException("鏂囦欢涓虹┖");
 			}
-
+			/*
 			if(!StringUtils.endsWith(file.getOriginalFilename(),".zip")){
 				throw new ServiceException("鏂囦欢蹇呴』涓簔ip鍖�");
-			}
+			}*/
 			String tempDir = System.getProperty("java.io.tmpdir");
 			Path tempPath = Paths.get(tempDir);
-
-			// 鍒涘缓瑙e帇鐩爣鐩綍锛堝湪涓存椂鐩綍涓嬪垱寤轰竴涓敮涓�瀛愮洰褰曪級
-			Path tempZipFile = Files.createTempFile("mdmimpfile-"+System.currentTimeMillis(), ".zip");
-			//Path extractDir = Files.createTempDirectory(tempPath, "unzip_");
-
-			file.transferTo(tempZipFile);
-
-			// 鍒涘缓瑙e帇鐩爣鐩綍锛堝湪涓存椂鐩綍涓嬪垱寤轰竴涓敮涓�瀛愮洰褰曪級
-			Path extractDir = Files.createTempDirectory(tempPath, "unzip_");
-
+			Path extractDir = Files.createTempDirectory(tempPath, "unzip_"+System.currentTimeMillis());
 			bladeRedis.setEx(getFileKey(),extractDir.toString(), Duration.ofHours(2));
-
-			extractZipToTempDir(tempZipFile,extractDir);
+			if(StringUtils.endsWithIgnoreCase(file.getOriginalFilename(),".zip")){
+				// 鍒涘缓瑙e帇鐩爣鐩綍锛堝湪涓存椂鐩綍涓嬪垱寤轰竴涓敮涓�瀛愮洰褰曪級
+				Path tempZipFile = Files.createTempFile("mdmimpfile-"+System.currentTimeMillis(), ".zip");
+				file.transferTo(tempZipFile);
+				extractZipToTempDir(tempZipFile,extractDir);
+			}else{
+				//鏅�氭枃浠讹紝鐩存帴鏀惧叆extract鏂囦欢澶�
+				file.transferTo(Paths.get(extractDir.toString()+File.separator+file.getOriginalFilename()));
+			}
 
 			//璇诲彇鏂囦欢鐩綍
-			/*
-			BladeFile bfile = ossTemplate.putFile(file);//涓婁紶锛屼緵鍚庣画鍏ュ簱浣跨敤
-
-			//璁剧疆涓�涓紦瀛橈紝2灏忔椂杩囨湡
-			InputStream zipFileInputStream = file.getInputStream();//test
-
-			byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream);
-			list = parseMdmZipFromByteArray(bytes);
-			*/
 			list = readTempDir(extractDir);
 		} catch (IOException e) {
 			log.error("瀵煎叆娑夊瘑缃戞憜娓℃枃浠跺け璐�",e);
@@ -101,17 +111,30 @@
 		return list;
 	}
 
-	public void extractZipToTempDir(Path zipFilePath,Path extractDir) throws IOException {
+	/**
+	 * 瑙e帇zip鍖呭埌涓存椂璺緞
+	 * @param zipFilePath zip鍖呮枃浠舵湇鍔″櫒涓婄殑璺緞
+	 * @param extractDir 鐩爣鐩綍
+	 * @throws IOException 鏂囦欢鎿嶄綔寮傚父
+	 */
+	public void extractZipToTempDir(Path zipFilePath,Path extractDir) throws IOException{
+		for (String encoding : ZipConstants.TRY_ENCODINGS) {
+			try {
+				extractZipToTempDirWithCharset(zipFilePath,extractDir,Charset.forName(encoding));
+				log.error("浣跨敤缂栫爜 {} 瑙f瀽鎴愬姛 ",encoding);
+				break;
+			} catch (Exception e) {
+				log.error("浣跨敤缂栫爜 {} 瑙f瀽澶辫触: ",encoding,e);
+			}
+		}
+	}
+	public void extractZipToTempDirWithCharset(Path zipFilePath, Path extractDir, Charset charset) throws IOException {
 		// 鑾峰彇绯荤粺涓存椂鐩綍
 		String tempDir = System.getProperty("java.io.tmpdir");
-		Path tempPath = Paths.get(tempDir);
 
 		// 鍒涘缓瑙e帇鐩爣鐩綍锛堝湪涓存椂鐩綍涓嬪垱寤轰竴涓敮涓�瀛愮洰褰曪級
-		//Path extractDir = Files.createTempDirectory(tempPath, "unzip_");
-		System.out.println("瑙e帇鐩綍: " + extractDir.toString());
-		//Files.newInputStream(Paths.get(zipFilePath));
 		try (InputStream fis = Files.newInputStream(zipFilePath);
-			 ZipInputStream zis = new ZipInputStream(fis)) {
+			 ZipInputStream zis = new ZipInputStream(fis,charset)) {
 
 			ZipEntry zipEntry = zis.getNextEntry();
 			while (zipEntry != null) {
@@ -142,10 +165,10 @@
 
 	/**
 	 * 闃叉ZIP Slip鏀诲嚮
-	 * @param zipEntry
-	 * @param targetDir
-	 * @return
-	 * @throws IOException
+	 * @param zipEntry zip鍐呴儴鏂囦欢璺緞
+	 * @param targetDir 鐩爣鏂囦欢澶�
+	 * @return 鏂囦欢璺緞
+	 * @throws IOException 鎿嶄綔鏂囦欢IO寮傚父
 	 */
 	Path zipSlipProtect(ZipEntry zipEntry, Path targetDir) throws IOException {
 		Path targetDirResolved = targetDir.resolve(zipEntry.getName());
@@ -159,135 +182,133 @@
 
 		return normalizePath;
 	}
-	/*
-	public static List<MdmProgramImportVO> parseMdmZipFromByteArray(byte[] zipData) throws IOException {
-		List<MdmProgramImportVO> list = new ArrayList<>();
-		Map<String,String> fileMd5Map = new HashMap<>();
-		Map<String,MdmProgramImportVO> 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();
-
-				String entryName = entry.getName();
-
-				if (!entry.isDirectory()) {
-					//鐩存帴瑙f瀽绋嬪簭鐨刯son鏂囦欢
-
-
-				}
-
-			}
-
-		}
-		//璁剧疆md5鍊�
-		fileDataMap.forEach((k,v)->{
-			if(fileMd5Map.containsKey(k)){
-				v.setMd5(fileMd5Map.get(k));
-			}
-		});
-		return list;
-	}
-	*/
-
+	/**
+	 * 璇诲彇瑙e帇鏂囦欢澶逛笅鎵�鏈夋枃浠� 瑙f瀽鎴恦o鍒楄〃
+	 * @param extractDir 瑙e帇鏂囦欢澶�
+	 * @return vo鍒楄〃
+	 * @throws IOException 瑙f瀽鏂囦欢鐨勫紓甯�
+	 */
 	public List<MdmProgramImportVO> readTempDir(Path extractDir) throws IOException {
 		List<MdmProgramImportVO> list = new ArrayList<>();
+		try (Stream<Path> paths = Files.walk(extractDir)) {
+			List<Path> filePathList = paths
+				.filter(Files::isRegularFile).toList();  // 鍙繚鐣欐櫘閫氭枃浠讹紝鎺掗櫎鐩綍
 
-		List<Machine> machines = machineService.lambdaQuery().eq(Machine::getStatus,Machine.STATUS_ENABLE).list();
+			for(Path path : filePathList){
+				list.add(readFileToVO(path));
+			}
+		}
+		/*
 		//璇诲彇鎵�鏈夋枃浠跺す
-		//List<Path> dirs = Files.list(extractDir).filter(Files::isDirectory).toList();
 		try (DirectoryStream<Path> stream = Files.newDirectoryStream(extractDir)) {
 			for (Path path : stream) {
 				if (Files.isDirectory(path)) {
-
-
-
 					// 濡傛灉鏄瓙鐩綍锛岃鍙栧叾涓殑鏂囦欢
 					try (DirectoryStream<Path> subStream = Files.newDirectoryStream(path)) {
 						for (Path subPath : subStream) {
 							if (Files.isRegularFile(subPath)) {
 								System.out.println("鎵惧埌鏂囦欢: " + subPath);
-								//files.add(subPath.getFileName().toString());
-								// 杩欓噷鍙互娣诲姞瀵规枃浠剁殑澶勭悊閫昏緫
 							}
 						}
 					}
-					//vo.setFiles(files);
-
 				} else if (Files.isRegularFile(path)) {
 					System.out.println("鎵惧埌鏂囦欢2: " + path);
 					//杩欓噷 鎵惧埌鐨勬枃浠朵笉鏄�
-					MdmProgramImportVO vo = new MdmProgramImportVO();
-					vo.setFilename(path.getFileName().toString());
-					vo.setDrawingNo(parseDrawingNo(vo.getFilename()));
-
-					try (InputStream inputStream = Files.newInputStream(path)) {
-						// 浣跨敤杈撳叆娴佽鍙栨枃浠跺唴瀹�
-						byte[] buffer = new byte[2000];
-						inputStream.read(buffer);
-						vo.setMd5(DigestUtils.md5Hex(buffer));
-
-
-					} catch (IOException e) {
-						log.error("璇诲彇鏂囦欢md5澶辫触",e);
-					}
-
-
-					try (InputStream inputStream = Files.newInputStream(path, StandardOpenOption.READ)) {
-						// 浣跨敤杈撳叆娴佽鍙栨枃浠跺唴瀹�
-						ByteArrayInputStream bas = new ByteArrayInputStream(inputStream.readAllBytes());
-						String line1 = FileContentUtil.readLineAt(bas,1);
-						//bas.mark(0);
-						bas.reset();
-						String line2 = FileContentUtil.readLineAt(bas,2);
-						System.out.println("line1="+line1);
-						Machine matchedMachine = null;
-						for (Machine machine : machines) {
-							if(Func.isNotBlank(machine.getProgSendDir()) && line1.contains(machine.getProgSendDir())){
-								matchedMachine = machine;
-								break;
-							}
-
-						}
-						if (matchedMachine != null) {
-							vo.setName(parseProgramName(vo.getFilename()));
-							vo.setMachineCode(matchedMachine.getCode());
-							//String sendPath = programAnnotationService.removeAnnotation(matchedMachine.getMachineGroupCode(),line1,"(",")");
-							vo.setFullPath(path.toString());//鏂囦欢鍦板潃
-							vo.setSendPath(matchedMachine.getProgSendDir());
-							vo.setId(vo.getFullPath());
-							vo.setProgramStatus(programAnnotationService.removeAnnotation(matchedMachine.getMachineGroupCode(),line2,"(",")"));
-
-							list.add(vo);
-						}
-
-					} catch (IOException e) {
-						log.error("璇诲彇鏂囦欢md5澶辫触",e);
-					}
-
-
-					//List<String> files = new ArrayList<>();
-
-
-					// 杩欓噷鍙互娣诲姞瀵规枃浠剁殑澶勭悊閫昏緫
+					list.add(readFileToVO(path));
 				}
 			}
-		}
-
-
+		}*/
 		return list;
 	}
+	public static byte[] getUTF8BytesFromGBKString(String gbkStr) {
+		int n = gbkStr.length();
+		byte[] utfBytes = new byte[3 * n];
+		int k = 0;
+		for (int i = 0; i < n; i++) {
+			int m = gbkStr.charAt(i);
+			if (m < 128 && m >= 0) {
+				utfBytes[k++] = (byte) m;
+				continue;
+			}
+			utfBytes[k++] = (byte) (0xe0 | (m >> 12));
+			utfBytes[k++] = (byte) (0x80 | ((m >> 6) & 0x3f));
+			utfBytes[k++] = (byte) (0x80 | (m & 0x3f));
+		}
+		if (k < utfBytes.length) {
+			byte[] tmp = new byte[k];
+			System.arraycopy(utfBytes, 0, tmp, 0, k);
+			return tmp;
+		}
+		return utfBytes;
+	}
 
+	ProgramNameVO tryParseProgramName(String fiilename){
+		ProgramNameVO pnmameVO = ProgramFileNameParser.parseProgramName(fiilename);//鏍囧噯utf8缂栫爜
+		if(pnmameVO.getDrawingNo() == null) {
+			//浣跨敤GBK缂栫爜瑙f瀽
+			pnmameVO = ProgramFileNameParser.parseProgramName(new String(getUTF8BytesFromGBKString(fiilename), StandardCharsets.UTF_8));
+		}
+		return pnmameVO;
+	}
+	/**
+	 * 灏嗘枃浠剁粍缁囨垚VO
+	 * @param path 鏂囦欢path
+	 * @return vo
+	 */
+	MdmProgramImportVO readFileToVO(Path path) throws UnsupportedEncodingException {
+		MdmProgramImportVO vo = new MdmProgramImportVO();
+		vo.setFilename(path.getFileName().toString());
 
+		ProgramNameVO pnmameVO = tryParseProgramName(vo.getFilename());
+		vo.setDrawingNo(pnmameVO.getDrawingNo());
+
+		try (InputStream inputStream = Files.newInputStream(path)) {
+			// 浣跨敤杈撳叆娴佽鍙栨枃浠跺唴瀹�
+			byte[] buffer = new byte[2000];
+			inputStream.read(buffer);
+			vo.setMd5(DigestUtils.md5Hex(buffer));
+		} catch (IOException e) {
+			log.error("璇诲彇鏂囦欢md5澶辫触",e);
+		}
+
+		try (InputStream inputStream = Files.newInputStream(path, StandardOpenOption.READ)) {
+			// 浣跨敤杈撳叆娴佽鍙栨枃浠跺唴瀹�
+			ByteArrayInputStream bas = new ByteArrayInputStream(inputStream.readAllBytes());
+
+			AnnotationProperties defAnnoProperties = AnnotationProperties.getDefault();
+			String sendPathLine = FileContentUtil.readLineAt(bas,defAnnoProperties.getSendPathLineIndex());
+
+			bas.reset();
+			String statusLine = FileContentUtil.readLineAt(bas,defAnnoProperties.getStatusLineIndex());
+			log.info("sendPathLine={}", sendPathLine);
+
+			Machine matchedMachine = machineService.getMachineBySendPathAnnotation(sendPathLine);
+
+			if (matchedMachine != null) {
+				vo.setName(pnmameVO.logicProgramName());
+				vo.setMachineCode(matchedMachine.getCode());
+
+				vo.setFullPath(path.toString());//鏂囦欢鍦板潃
+				vo.setSendPath(matchedMachine.getProgSendDir());
+				vo.setId(vo.getFullPath());
+				vo.setProgramStatus(programAnnotationService.removeAnnotation(matchedMachine.getControlSystem(),statusLine));
+			}
+		} catch (IOException e) {
+			log.error("璇诲彇鏂囦欢澶辫触",e);
+			throw new ServiceException("瀵煎叆绋嬪簭澶辫触"+path.getFileName().toString()+","+e.getMessage());
+		}
+		return vo;
+	}
 	/**
 	 * 瑙f瀽鍑洪浂缁勪欢濂�
 	 * @param filename
 	 * @return
 	 */
+	/*
 	String parseDrawingNo(String filename){
+
+		/*
 		String drawingNo = "";
 		int idx = filename.lastIndexOf("-");
 		String temp;
@@ -315,6 +336,8 @@
 
 		}
 		return drawingNo;
+
+
 	}
 
 	String parseProgramName(String filename){
@@ -335,42 +358,103 @@
 				}
 			}
 			//浠ヤ笂鍘绘帀浜嗘渶鍚�2娈垫鏁板拰娈靛彿
-
-
 		}
 		return programName;
 	}
-
+*/
 	/**
 	 * 鍏ュ簱mdm娑夊瘑缃戞枃浠�
 	 * @param ids id鍒楄〃閫楀彿鍒嗛殧
-	 * @return
 	 */
 	public void mdmFileAccept(String ids) throws IOException {
 
+		List<FileSendRecord>  importedRecords = new ArrayList<>();
 		List<String> idList = Func.toStrList(ids);
 
-		String ditStr = bladeRedis.get(getFileKey());
-		Path extractDir = Paths.get(ditStr);
-
+		String dictStr = bladeRedis.get(getFileKey());
+		if(dictStr == null){
+			throw new ServiceException("鏂囦欢缂撳瓨宸茶繃鏈燂紝璇烽噸鏂颁笂浼犳枃浠躲��");
+		}
+		Path extractDir = Paths.get(dictStr);
 		List<MdmProgramImportVO> list = readTempDir(extractDir);
 
+		List<DictBiz> annoDictList = programAnnotationService.getAnnotionDictList();
 		String destFileFull;
 		for(String str : idList){
-			System.out.println(str);
-			for(MdmProgramImportVO vo : list){
-				if(StringUtils.equals(vo.getFullPath(),str)){
-					destFileFull = vo.getSendPath()+File.separator+vo.getFilename();
-					File destFile = new File(destFileFull);
-					FileUtils.forceMkdirParent(destFile);
-					FileUtils.copyFile(new File(str),destFile);
-					break;
-				}
+			Optional<MdmProgramImportVO> optVO = list.stream().filter(vo -> vo.getId().equals(str)).findFirst();
+
+			if(optVO.isEmpty()){
+				continue;
 			}
+
+			MdmProgramImportVO vo = optVO.get();
+
+			destFileFull = vo.getSendPath()+File.separator+vo.getFilename();
+			File destFile = new File(destFileFull);
+			FileUtils.forceMkdirParent(destFile);
+			FileUtils.copyFile(new File(str),destFile);
+
+			FileSendRecord record = new FileSendRecord();
+			record.setName(destFile.getName());
+			Path destPath = Paths.get(destFileFull);
+			record.setMachineCode(vo.getMachineCode());
+			record.setFileSize(Files.size(destPath));
+
+			try(InputStream inputStream = new FileInputStream(destFile)){
+				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;
+	}
 }

--
Gitblit v1.9.3