From 58879e5f5889882db6f5279de89b478afb3a1892 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期一, 07 七月 2025 21:00:51 +0800
Subject: [PATCH] bangding 流程

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/vo/MachineBackFileHandleExcelVO.java            |    6 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java                 |   20 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/mapper/MachineBackFileMapper.java               |    6 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java                               |    5 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java                       |   85 +++++++++++-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/mapper/MachineBackFileMapper.xml                |    4 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/MdmProgramImportVO.java                          |   27 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/vo/MachineBackFileVO.java                       |    6 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmProgramImportController.java          |   67 +++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java                |  183 ++++++++++++++++++++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/MachineBackFileHandleController.java |    6 
 11 files changed, 396 insertions(+), 19 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/MachineBackFileHandleController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/MachineBackFileHandleController.java
index c561461..74e22dd 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/MachineBackFileHandleController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/MachineBackFileHandleController.java
@@ -62,9 +62,11 @@
 
 		List<MachineBackFileHandleExcelVO> list = new ArrayList<>();
 		pages.getRecords().forEach(vo ->{
-			MachineBackFileHandleExcelVO excelVO	= new MachineBackFileHandleExcelVO();
-			BeanUtil.copy(vo, excelVO);
+			MachineBackFileHandleExcelVO excelVO = new MachineBackFileHandleExcelVO();
+			BeanUtil.copyProperties(vo, excelVO);
 			excelVO.setCuredStatus(vo.getIsCured()==0?"鍥哄寲":"鏈浐鍖�");
+
+			list.add(excelVO);
 		});
 		ExcelUtil.export(response, "鏈哄簥鍥炰紶绋嬪簭" + DateUtil.time(), "鏈哄簥鍥炰紶绋嬪簭琛�", list, MachineBackFileHandleExcelVO.class);
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/mapper/MachineBackFileMapper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/mapper/MachineBackFileMapper.java
index b679516..1a30cc6 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/mapper/MachineBackFileMapper.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/mapper/MachineBackFileMapper.java
@@ -14,6 +14,12 @@
 
 	IPage<MachineBackFileVO> pageQuery(IPage<MachineBackFile> page, @Param("query")MachineBackFileQueryVO queryVO);
 
+	/**
+	 * 鏈哄簥鍥炰紶鏂囦欢鍒嗛〉鏌ヨ
+	 * @param page
+	 * @param query
+	 * @return
+	 */
 	IPage<MachineBackFileVO> handlePageQuery(IPage<MachineBackFile> page, MachineBackFileHandleQueryVO query);
 	//pageMachine
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/mapper/MachineBackFileMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/mapper/MachineBackFileMapper.xml
index 0b80fa1..a418734 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/mapper/MachineBackFileMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/mapper/MachineBackFileMapper.xml
@@ -5,7 +5,7 @@
     <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
     <resultMap id="BaseResultMap" type="org.springblade.mdm.machineback.entity.MachineBackFile">
         <id column="id" property="id"/>
-        <result column="filename" property="filename"/>
+        <result column="name" property="name"/>
         <result column="status" property="status"/>
         <result column="create_time" property="createTime"/>
         <result column="update_time" property="updateTime"/>
@@ -31,7 +31,7 @@
 
     <!--鏈哄簥鍥炰紶绋嬪簭澶勭悊鍒嗛〉-->
     <select id="handlePageQuery" resultType="org.springblade.mdm.machineback.vo.MachineBackFileVO">
-        select f.id,p.name program_name,p.is_cured,f.create_time,m.code machine_code, m.name machine_name,f.create_time arrived_time
+        select f.id,p.name name,p.code,p.is_cured,f.create_time,m.code machine_code, m.name machine_name,f.create_time arrived_time
         from mdm_machine_back_file f join mdm_machine m on f.machine_code=m.code
         left join mdm_nc_program p on f.program_id=p.id
         <where>
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/vo/MachineBackFileHandleExcelVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/vo/MachineBackFileHandleExcelVO.java
index a1c23c7..7754264 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/vo/MachineBackFileHandleExcelVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/vo/MachineBackFileHandleExcelVO.java
@@ -19,7 +19,9 @@
 public class MachineBackFileHandleExcelVO {
 
 	@ExcelProperty("绋嬪簭缂栧彿")
-	private String programName;
+	private String code;
+	@ExcelProperty("鏂囦欢鍚嶇О")
+	private String name;
 
 	@ColumnWidth(20)
 	@ExcelProperty("鍥炰紶鏈哄簥")
@@ -27,7 +29,7 @@
 	@ExcelProperty("鍥哄寲鐘舵��")
 	private String curedStatus;
 
-	@DateTimeFormat("yyyy-MM-dd HHmmss")
+	@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
 	@ExcelProperty("鏂囦欢鍒拌揪鏃堕棿")
 	private Date arrivedTime;
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/vo/MachineBackFileVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/vo/MachineBackFileVO.java
index 0b884fa..3677c6e 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/vo/MachineBackFileVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/vo/MachineBackFileVO.java
@@ -15,10 +15,10 @@
 	private String name;
 	@Schema(description = "鏈哄簥缂栧彿/鍥炰紶鏈哄簥")
 	private String machineCode;
-	@Schema(description = "绋嬪簭鍚嶇О/缂栧彿")
-	private String programName;
+	@Schema(description = "绋嬪簭缂栧彿")
+	private String code;
 	@Schema(description = "鍥哄寲鐘舵��")
-	private Integer isCured;
+	private Integer isCured=0;
 	@Schema(description = "鏂囦欢鍒拌揪鏃堕棿")
 	private Date arrivedTime;
 }
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
new file mode 100644
index 0000000..086e661
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmProgramImportController.java
@@ -0,0 +1,67 @@
+
+package org.springblade.mdm.program.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
+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.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;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * mdm瀵煎叆鎺ュ彛锛屽伐鎺х綉鍔熻兘
+ *
+ * @author yangys
+ */
+@NonDS
+@RestController
+@RequestMapping("/program/mdmimport/")
+@AllArgsConstructor
+@Tag(name = "DNC瀵煎叆", description = "DNC瀵煎叆鎺ュ彛")
+@Slf4j
+public class MdmProgramImportController {
+
+	//private final DncSendBackService dncSendBackService;
+	private final MdmProgramImportService mdmProgramImportService;
+	/**
+	 * 涓婁紶DNC鍥炰紶鏂囦欢
+	 *
+	 * @param file    dnc绋嬪簭鎵撳寘鏂囦欢
+	 */
+	@PostMapping("upload")
+	@ApiOperationSupport(order = 1)
+	@Operation(summary = "MDM绋嬪簭瀵煎叆", description = "宸ユ帶缃憁dm绋嬪簭瀵煎叆")
+	public R<List<MdmProgramImportVO>> upload(@RequestParam MultipartFile file) {
+		try {
+			return R.data(mdmProgramImportService.mdmImportUpload(file));
+		}catch (Exception e){
+			log.error("瀵煎叆閿欒",e);
+			return R.fail(e.getMessage());
+		}
+	}
+
+	@PostMapping("accept")
+	@ApiOperationSupport(order = 2)
+	@Operation(summary = "MDM绋嬪簭鍏ュ簱鍏ュ簱", description = "娑夊瘑缃戠▼搴忕‘璁ゅ叆搴�")
+	public R<Void> accept(@RequestParam String ids) {
+		try {
+			mdmProgramImportService.mdmFileAccept(ids);
+		}catch (Exception e){
+			log.error("鍏ュ簱閿欒",e);
+			return R.fail(e.getMessage());
+		}
+		return R.success();
+	}
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java
index 0428131..f3778a4 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java
@@ -51,7 +51,7 @@
 	public R<Boolean> upload(NcProgramUploadVO uploadVO) {
 		//@Parameter(description="鏂囦欢") @RequestPart("file") MultipartFile file, @Parameter(description="鎵�灞炶妭鐐笽D")@RequestParam Long nodeId,
 		//							 @Parameter(description="鏂囦欢鍒嗙被锛屼娇鐢ㄥ瓧鍏�(node_file_type)") @RequestParam String category
-		ncProgramService.uploadProgramFile(uploadVO);
+		ncProgramService.uploadProgramFileNew(uploadVO);
 		return R.<Boolean>status(true);
 	}
 
@@ -69,9 +69,19 @@
 
 	@GetMapping("/content")
 	@Operation(summary = "鑾峰彇鏂囦欢鍐呭", description = "浠呴檺鏂囨湰鏍煎紡鐨勫唴瀹癸紝浜岃繘鍒舵枃浠跺皢杩斿洖绌轰覆")
-	public R<String> fileContent(Long id) {
+	public R<String> fileContent(@Parameter(description = "绋嬪簭鏂囦欢id") Long id) {
 		try {
 			return R.data(ncProgramService.getFileContent(id));
+		}catch(Exception e) {
+			log.error("鍒犻櫎鏂囦欢澶辫触",e);
+			return R.fail(e.getMessage());
+		}
+	}
+	@GetMapping("/content-by-nodeid")
+	@Operation(summary = "鏍规嵁鑺傜偣鑾峰彇鏂囦欢鍐呭", description = "浠呴檺鏂囨湰鏍煎紡鐨勫唴瀹癸紝浜岃繘鍒舵枃浠跺皢杩斿洖绌轰覆")
+	public R<String> fileContentByNodeId(@Parameter(description = "鑺傜偣id") Long nodeId) {
+		try {
+			return R.data(ncProgramService.getFileContentByNodeId(nodeId));
 		}catch(Exception e) {
 			log.error("鍒犻櫎鏂囦欢澶辫触",e);
 			return R.fail(e.getMessage());
@@ -111,4 +121,10 @@
 
 		return R.data(approveRecordService.listByNcProgramId(ncProgramId));
 	}
+
+	@PostMapping("/send")
+	@Operation(summary = "绋嬪簭涓嬪彂", description = "宸ユ帶缃戞暟鎺х▼搴忎笅鍙戯紙鍙戦�佸埌鏈哄簥閰嶇疆鐨勪笅鍙戠洰褰曪級")
+	public R<List<NcProgramVO>> send(@Parameter(description="鎵�灞炶妭鐐笽D")@RequestParam Long id) {
+		return null;//R.data(ncProcessProgRefService.listByProcess(processInstanceId));
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java
index c59200a..fda3af2 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java
@@ -25,7 +25,10 @@
 	 * 鎵�灞炶妭鐐筰d锛屽繀椤绘湭鈥滅▼搴忓寘鍚�"鐨勮妭鐐�
 	 */
 	private long ncNodeId;
-
+	/**
+	 * 鍚屽悕缁戝畾鑺傜偣id
+	 */
+	private Long bindNcNodeId;
 	/**
 	 * 鏂囦欢鍦板潃
 	 */
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
new file mode 100644
index 0000000..ec40485
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
@@ -0,0 +1,183 @@
+
+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.BizServiceImpl;
+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.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.program.vo.MdmProgramImportVO;
+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.LocalDateTime;
+import java.util.*;
+
+/**
+ * MDM绋嬪簭瀵煎叆锛堝伐鎺х綉鍔熻兘锛�
+ *
+ * @author yangys
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class MdmProgramImportService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> {
+	private final CureFlowService cureFlowService;
+	private final NcProgramService ncProgramService;
+	/**
+	 * MDM瀵煎叆鏂囦欢涓婁紶
+	 * @param file MDM娑夊瘑缃戝鍑烘枃浠�
+	 * @return
+	 */
+	public List<MdmProgramImportVO> mdmImportUpload(MultipartFile file) {
+		List<MdmProgramImportVO> list;
+		try {
+			//String fileName = file.getOriginalFilename();
+			//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<MdmProgramImportVO> parseDncZipFromByteArray(byte[] zipData) throws IOException {
+		List<MdmProgramImportVO> list = new ArrayList<>();
+		//List<DncSendBackData> datas  = ZipFileDirectoryScanner.getFilesInDirectoryRecursive(zipData, "");
+
+		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()) {
+			//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);
+								MdmProgramImportVO d = new MdmProgramImportVO();
+								d.setName(jsonObject.getString("name"));
+								d.setId(jsonObject.getLong("id"));
+								d.setCode(jsonObject.getString("code"));
+								//d.setFileBackTime(LocalDateTime.now());//鍒拌揪鏃堕棿
+
+								fileDataMap.put(d.getName(),d);
+								list.add(d);
+							}
+
+						}
+					}else{
+						try (InputStream inputStream = zipFile.getInputStream(entry)) {
+							fileMd5Map.put(entryName,DigestUtils.md5Hex(inputStream));//鑾峰彇鏂囦欢MD5
+						}
+
+					}
+					System.out.println("鏂囦欢鍚�: " + entry.getName());
+					System.out.println("澶у皬: " + entry.getSize());
+
+					// 璇诲彇鏂囦欢鍐呭鍒板瓧鑺傛暟缁�
+					ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+
+				}
+
+			}
+
+		}
+		//璁剧疆md5鍊�
+		fileDataMap.forEach((k,v)->{
+			if(fileMd5Map.containsKey(k)){
+				v.setMd5(fileMd5Map.get(k));
+			}
+		});
+		return list;
+	}
+
+
+	/**
+	 * 鍏ュ簱mdm娑夊瘑缃戞枃浠�
+	 * @param ids id鍒楄〃閫楀彿鍒嗛殧
+	 * @return
+	 */
+	public void mdmFileAccept(String ids) {
+		/*
+		List<Long> idList = Func.toLongList(ids);
+		List<NcProgram> progList = ncProgramService.listByIds(idList);
+		NcProgramExchange exchange;
+		//NcProgram program;
+		//NcNode programNode;
+
+		for(NcProgram prog:progList){
+			exchange = new NcProgramExchange();
+			exchange.setName(prog.getName());
+			exchange.setExchangeType(2);//鍥炰紶
+			exchange.setNcProgramId(prog.getId());
+
+			this.save(exchange);
+
+		}
+	//鐩存帴鍏ュ簱锛屾棤娴佺▼
+		*/
+
+	}
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
index 8250bc0..3ec932c 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
@@ -25,6 +25,7 @@
  */
 package org.springblade.mdm.program.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -93,7 +94,6 @@
 	 */
 	public void uploadProgramFile(NcProgramUploadVO uploadVO) {
 
-
 		MultipartFile file = uploadVO.getFile();
 		BladeFile bfile = ossTemplate.putFile(uploadVO.getFile());
 		String link = bfile.getLink();
@@ -119,6 +119,49 @@
 		this.save(prog);
 	}
 
+	/**
+	 * 涓婁紶绋嬪簭鏂囦欢鍒版寚瀹氳妭鐐�
+	 * @param uploadVO 涓婁紶鏂囦欢琛ㄥ崟鏁版嵁
+	 */
+	public void uploadProgramFileNew(NcProgramUploadVO uploadVO) {
+
+		MultipartFile file = uploadVO.getFile();
+		BladeFile bfile = ossTemplate.putFile(uploadVO.getFile());
+		String link = bfile.getLink();
+		//淇濆瓨profame
+		NcProgram prog = new NcProgram();
+		prog.setCode(generageCode());
+		prog.setName(file.getOriginalFilename());
+		prog.setNcNodeId(uploadVO.getNodeId());
+		prog.setOssName(bfile.getName());
+		prog.setPartNo(uploadVO.getPartNo());
+		prog.setProcessEdition(uploadVO.getProcessEdition());
+		prog.setIsLastEdition(1);
+		prog.setMachineCode(uploadVO.getMachineCode());
+		boolean isTextFile = false;
+		try {
+			isTextFile = FileContentUtil.isTextFile(file.getInputStream());
+		} catch (IOException e) {
+			log.warn("鍒ゆ柇鏄惁鏂囨湰鏂囦欢寮傚父",e);
+		}
+		prog.setIsTextFile(isTextFile);
+		prog.setUrl(link);
+		prog.setCategory(uploadVO.getCategory());
+
+		NcNode node = new NcNode();
+		node.setNodeType("70");//鏂囦欢鑺傜偣
+		node.setName(prog.getName());
+		node.setMachineCode(uploadVO.getMachineCode());
+		node.setParentId(uploadVO.getNodeId());
+		node.setPartNo(uploadVO.getPartNo());
+		node.setProcessName(uploadVO.getProcessName());
+
+		nodeService.save(node);
+
+		prog.setBindNcNodeId(node.getId());
+		this.save(prog);
+	}
+
 	String generageCode(){
 		ProgramSeq program = new ProgramSeq();
 		seqMapper.insert(program);
@@ -128,17 +171,45 @@
 	}
 	/**
 	 * 鍒犻櫎涓�涓▼搴�
-	 * @param id
+	 * @param id 绋嬪簭id
 	 */
 	public String getFileContent(Long id) {
 		String result  ="";
 
 		NcProgram prog = this.getById(id);
-		String fileName = prog.getOssName();
-		try (InputStream inputStream = ossTemplate.statFileStream(fileName)) {
-			result = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
-		} catch (IOException e) {
-			throw new RuntimeException(e);
+		if(prog.getIsTextFile()!=null && prog.getIsTextFile()){
+			String fileName = prog.getOssName();
+			try (InputStream inputStream = ossTemplate.statFileStream(fileName)) {
+				result = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
+			} catch (IOException e) {
+				throw new RuntimeException(e);
+			}
+		}else{
+			result = "闈炴枃鏈牸寮忔枃浠�";
+		}
+		return result;
+	}
+
+	/**
+	 * 鑾峰彇鏂囦欢鍐呴タ鍝﹂偅涓�
+	 * @param ncNodeId 鑺傜偣id
+	 */
+	public String getFileContentByNodeId(Long ncNodeId) {
+		String result  ="";
+		NcNode node = this.nodeService.getById(ncNodeId);
+		LambdaQueryWrapper<NcProgram> wrapper = new LambdaQueryWrapper<>();
+		wrapper.eq(NcProgram::getBindNcNodeId, ncNodeId);
+		wrapper.eq(NcProgram::getIsLastEdition,1);
+		NcProgram prog = this.getOne(wrapper);
+		if(prog.getIsTextFile()!=null && prog.getIsTextFile()){
+			String fileName = prog.getOssName();
+			try (InputStream inputStream = ossTemplate.statFileStream(fileName)) {
+				result = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
+			} catch (IOException e) {
+				throw new RuntimeException(e);
+			}
+		}else{
+			result = "闈炴枃鏈牸寮忔枃浠�";
 		}
 		return result;
 	}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/MdmProgramImportVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/MdmProgramImportVO.java
new file mode 100644
index 0000000..3af41ed
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/MdmProgramImportVO.java
@@ -0,0 +1,27 @@
+package org.springblade.mdm.program.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 鍦ㄥ伐鎺х綉瀵煎叆MDM绋嬪簭
+ */
+@Setter
+@Getter
+@Schema(description = "MDM瀵煎叆鏁版嵁")
+public class MdmProgramImportVO {
+	@Schema(description = "鏂囦欢鏁版嵁搴撶紪鍙�(鏁版帶绋嬪簭鐨刬d)")
+	private Long id;
+
+	@Schema(description = "绋嬪簭缂栧彿")
+	private String code;
+	@Schema(description = "绋嬪簭鍚嶇О")
+	private String name;
+
+	private String md5;
+
+}

--
Gitblit v1.9.3